AppConfig.ready() 的重新定义
Redefinition of AppConfig.ready()
Django 1.9.
正在尝试学习信号。在 AppConfig.ready() 的文档中说 "Subclasses can override this method to perform initialization tasks such as registering signals." (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")
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.
请注意,"Redefined ready method in some_app" 打印了两次。
你能帮我理解为什么它被调用了两次吗?这不是我的错误,为什么注册信号需要两次调用?
当您使用 python manage.py runserver
Django 启动两个进程,一个用于实际的开发服务器,另一个在代码更改时重新加载您的应用程序
您可以测试它在 AppConfig
class 中导入 os
并在 ready
函数中打印进程 ID,如下所示:
import os
class SomeAppConfig(AppConfig):
name = 'some_app'
def ready(self):
print(os.getpid())
你会看到它打印了两个不同的进程
你也可以在没有重新加载选项的情况下启动服务器,你将只看到一个进程运行(你的代码print("Redefined ready method in some_app")
只会执行一次):
python manage.py runserver --noreload
Django 1.9.
正在尝试学习信号。在 AppConfig.ready() 的文档中说 "Subclasses can override this method to perform initialization tasks such as registering signals." (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")
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.
请注意,"Redefined ready method in some_app" 打印了两次。
你能帮我理解为什么它被调用了两次吗?这不是我的错误,为什么注册信号需要两次调用?
当您使用 python manage.py runserver
Django 启动两个进程,一个用于实际的开发服务器,另一个在代码更改时重新加载您的应用程序
您可以测试它在 AppConfig
class 中导入 os
并在 ready
函数中打印进程 ID,如下所示:
import os
class SomeAppConfig(AppConfig):
name = 'some_app'
def ready(self):
print(os.getpid())
你会看到它打印了两个不同的进程
你也可以在没有重新加载选项的情况下启动服务器,你将只看到一个进程运行(你的代码print("Redefined ready method in some_app")
只会执行一次):
python manage.py runserver --noreload