我正在编写一个Django Middleware类,我想在启动时只执行一次,以初始化其他一些arbritary代码.我已经按照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')
Run Code Online (Sandbox Code Playgroud)
在我的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
Run Code Online (Sandbox Code Playgroud)
任何有关"Hello world"打印两次的想法?谢谢.
我想在服务器启动(开发和生产)上执行这些代码行:
from django.core import management
management.call_command('syncdb', interactive=False)
Run Code Online (Sandbox Code Playgroud)
放入settings.py它不起作用,因为它需要已经加载设置.
将它们放在视图中并从外部访问该视图也不起作用,因为有些中间件使用数据库而这些中间件将失败并且不允许我访问视图.
将它们放在中间件中会起作用,但每次访问我的应用程序时都会调用它.一个可能的解决方案可能是创建一个中间件来完成所有工作,然后将其自身移除,MIDDLEWARE_CLASSES因此不再调用它.如果没有太多的猴子补丁,我可以这样做吗?