【发布时间】:2011-10-11 03:19:14
【问题描述】:
我正在编写一个 Django 中间件类,我只想在启动时执行一次,以初始化一些其他任意代码。我遵循了 sdolan here 发布的非常好的解决方案,但是“Hello”消息输出到终端两次。例如
from django.core.exceptions import MiddlewareNotUsed
from django.conf import settings
class StartupMiddleware(object):
def __init__(self):
print "Hello world"
raise MiddlewareNotUsed('Startup complete')
在我的 Django 设置文件中,我将类包含在 MIDDLEWARE_CLASSES 列表中。
但是当我使用 runserver 运行 Django 并请求页面时,我进入了终端
Django version 1.3, using settings 'config.server'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Hello world
[22/Jul/2011 15:54:36] "GET / HTTP/1.1" 200 698
Hello world
[22/Jul/2011 15:54:36] "GET /static/css/base.css HTTP/1.1" 200 0
任何想法为什么“Hello world”被打印两次?谢谢。
【问题讨论】:
-
只是为了好奇,你知道为什么 init.py 中的代码会被执行两次吗?
-
@Mutant 它只在 runserver 下执行了两次......这是因为 runserver 首先加载应用程序以检查它们,然后实际启动服务器。即使在 runserver 自动重新加载时,代码也只会执行一次。
-
哇,我一直在这里......所以再次感谢您的评论@Pykler,这就是我想知道的。