在哪里放置 django 信号接收器代码,将它们分布在多个文件中?

where to put django signal receiver code, spread them over multiple files?

我已将我的信号接收器代码放入相应的模型文件中。

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

我还没有看到关于将信号接收器代码放在哪里的讨论。

(让我怀疑我不应该做很多信号接收器?)

查看文档:
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'

# 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