在哪里放django信号接收器代码,将它们传播到多个文件?

eug*_*ene 5 django signals

我把我的信号接收器代码放在相应的模型文件中.

但是,信号接收器不断增长,我想将它们分成多个文件.

我还没有看到有关放置信号接收器代码的位置的讨论.

(让我怀疑我不应该制造许多信号接收器吗?)

Ane*_*pic 9

请参阅文档:https:
//docs.djangoproject.com/en/1.8/topics/signals/#connecting-receiver-functions

将它们放在一个单独的signals.py文件中是很常见的,可能是项目中每个模块一个,但是你需要确保导入这些文件以便你的信号接收器得到注册.

正如上面的文档中详述的那样,Django 1.7+现在具有AppConfig.ready这种情况的机制

这里有一个很好的解释:http:
//chriskief.com/2014/02/28/django-1-7-signals-appconfig/

(作为你可能会做的一个例子)

基本上:

# myapp/__init__.py
default_app_config = 'myapp.apps.MyAppConfig'
Run Code Online (Sandbox Code Playgroud)

# myapp/apps.py
from django.apps import AppConfig

class MyAppConfig(AppConfig):

    name = 'myapp'
    verbose_name = 'My App'

    def ready(self):

        # import signal handlers
        import myapp.signals.handlers
Run Code Online (Sandbox Code Playgroud)

  • 应该注意的是,从1.8开始,Django文档说"新应用程序应该避免使用default_app_config.相反,它们应该要求在INSTALLED_APPS中明确配置相应AppConfig子类的虚线路径." 因此,您只需将`myapp.apps.MyAppConfig`直接放入`INSTALLED_APPS`,而不是在创建新应用程序时使用`default_app_config`. (3认同)