我正在编写一个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"打印两次的想法?谢谢.
Django 1.9.
试图学习信号.在AppConfig.ready()的文档中,据说"子类可以覆盖此方法来执行初始化任务,例如注册信号".(https://docs.djangoproject.com/en/1.9/ref/applications/#django.apps.AppConfig.ready).
some_app/apps.py
class SomeAppConfig(AppConfig):
name = 'some_app'
def ready(self):
print("Redefined ready method in some_app")
Run Code Online (Sandbox Code Playgroud)
demo_signals/settings.py
INSTALLED_APPS = [
...
"some_app.apps.SomeAppConfig",
]
python manage.py runserver
Redefined ready method in some_app
Redefined ready method in some_app
Performing system checks...
System check identified no issues (0 silenced).
May 25, 2016 - 15:15:58
Django version 1.9.6, using settings 'demo_signals.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Run Code Online (Sandbox Code Playgroud)
请注意,"some_app中的重新定义的就绪方法"打印两次.
你能帮我理解为什么它被召唤两次.这不是我的错,为什么注册信号需要两次调用?