我正在编写一个Django中间件类,我只想在启动时执行一次,以初始化其他任意代码。我遵循了sdolan在这里发布的非常好的解决方案,但是“Hello”消息会被输出到终端两次。例如
来自django.core.exceptions的
导入MiddlewareNotUsed
从django.conf导入设置
类启动中间件(对象):
定义初始化(自):
打印“Hello world”
提升MiddlewareNotUsed('启动完成')
在我的Django设置文件中,MIDDLEWARE\u CLASSES列表中包含了这个类
但是当我使用runserver运行Django并请求一个页面时,我进入了终端
Django 1.3版,使用“config.server”设置
开发服务器正在运行http://127.0.0.1:8000/
使用CONTROL-C退出服务器。
你好,世界
[22/Jul/2011 15:54:36]“GET/HTTP/1.1”200 698
你好,世界
[22/Jul/2011 15:54:36]“GET/static/css/base.css HTTP/1.1”200 0
你知道为什么“Hello world”会被打印两次吗?谢谢
更新:Django1.7现在有了一个钩子
文件:myapp/apps.py
来自django.apps的
导入AppConfig
类MyAppConfig(AppConfig):
名称='myapp'
verbose_name=“我的应用程序”
def就绪(自我):
在此处传递启动代码
文件:myapp/\uuuuu init\uuuuu.py
默认应用程序配置='myapp.apps.MyAppConfig'
对于Django<;1.7
第一个答案似乎不再有效,URL.py在第一个请求时加载
最近的工作是将启动代码放入任何一个已安装的应用程序init.py中,例如myapp/\uuuuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
def startup():
传一个大东西
启动()
使用/manage.py运行服务器时。。。这将执行两次,但这是因为runserver有一些技巧来首先验证模型,等等。。。正常部署,甚至在runserver自动重新加载时,这只执行一次