django – 重新定义AppConfig.ready()

django – 重新定义AppConfig.ready(),第1张

概述Django 1.9. 试图学习信号.在AppConfig.ready()的文档中,据说“子类可以覆盖此方法来执行初始化任务,例如注册信号”. (https://docs.djangoproject.com/en/1.9/ref/applications/#django.apps.AppConfig.ready). some_app / apps.py class SomeAppConfig(Ap 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")

demo_signals / settings.py

INSTALLED_APPS = [    ...    "some_app.apps.someAppConfig",]python manage.py runserverredefined ready method in some_appredefined ready method in some_appPerforming system checks...System check IDentifIEd no issues (0 silenced).May 25,2016 - 15:15:58Django 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.

请注意,“some_app中的重新定义的就绪方法”打印两次.

你能帮我理解为什么它被召唤两次.这不是我的错,为什么注册信号需要两次调用?

解决方法 当你使用python manage.py runserver时,Django启动两个进程,一个用于实际开发服务器,另一个用于在代码更改时重新加载应用程序

您可以测试它在AppConfig类中导入os并在ready函数中打印进程ID,如下所示:

import osclass SomeAppConfig(AppConfig):    name = 'some_app'    def ready(self):        print(os.getpID())

您将看到它打印两个不同的进程

您也可以在没有重新加载选项的情况下启动服务器,并且您将看到只有一个进程正在运行(并且您的代码打印(“some_app中的重新定义的就绪方法”)将只执行一次):

python manage.py runserver --noreload
总结

以上是内存溢出为你收集整理的django – 重新定义AppConfig.ready()全部内容,希望文章能够帮你解决django – 重新定义AppConfig.ready()所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1193654.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存