为什么信号不会触发?

时间:2016-11-03 00:39:40

标签: django signals django-registration django-signals

坐了一天。真的无法理解为什么激活用户时没有触发此信号,没有错误日志,激活时管理员没有异常。有人可以帮忙吗?以下代码应该在用户的apache error.log中生成日志消息,对吗?

import logging
from django.dispatch import receiver
from registration.signals import user_activated

@receiver(user_activated)
def registered_callback(sender, **kwargs):
    logger = logging.getLogger("user-activated")
    logger.error("activated here")

user_registered

相同

1 个答案:

答案 0 :(得分:3)

首先我使用 django 1.8.3 。你应该首先注册你的信号。据我所知,有一些方法可以做到这一点,但这就是我正在做的事情; 在您的应用中创建signals.py在那里写下您的信号;

from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=your_model,dispatch_uid="yourmodel_save_receiver")
            def post_save_yourmodel(sender, instance, **kwargs):
                 if instance.profile_status:
                     print "active"
                 else:
                     print "not active"

然后你应该创建apps.py。此文件包含模型的配置信息。

from django.apps import AppConfig
class yourmodel_config(AppConfig):
    name = 'yourmodel_config'
    verbose_name = 'your_model config'

    def ready(self):
        import yourmodel.signals

只要您的应用程序准备就绪,您的信号就会被导入 最后打开__init__.py并添加以下内容。

default_app_config = 'yourmodel.apps.yourmodel_config'

通过这个,您可以为您的模型定义应用程序配置。此示例保存yourmodel时,信号检查profile_status属性并根据值(true或false)打印输出到控制台。您还可以向模型添加created参数,以了解是否已创建模型实例。如果创建了新记录,created将返回True。 def post_save_yourmodel(sender, instance, created, **kwargs):。否则,只要使用yourmodel.save()保存模型,就会触发此信号。 考虑这是一个post_save示例。您可以从here找到模型信号列表。