我正在编写一个 Django 中间件类,我只想在启动时执行一次,以初始化其他一些任意代码。我遵循了 sdolan在这里发布的非常好的解决方案,但是“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列表中。
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”被打印两次?谢谢。
从下面 Pykler 的回答中更新:Django 1.7 现在有一个钩子
不要这样做。
您不希望一次性启动事物的“中间件”。
你想在顶层执行代码urls.py。该模块被导入并执行一次。
urls.py
from django.confs.urls.defaults import * from my_app import one_time_startup urlpatterns = ... one_time_startup()