为用户激活其帐户时创建自定义信号

时间:2011-06-30 08:13:18

标签: django signals

我正在尝试为字段auth_user.is_active变为1时创建自定义信号。我查看了Django关于信号的文档,但却无法理解如何实现自定义信号。

当用户帐户变为活动状态时,我想执行以下功能:

def new_user(sender, **kwargs)
    profile = User.objects.get(id=user_id).get_profile()
    return RecentActivity(content_object=profile, event_type=1, timestamp=datetime.datetime.now())

我该怎么做?而且,使用信号直接进行数据库插入的优势是什么?谢谢。

2 个答案:

答案 0 :(得分:1)

如果您想在字段更改时执行某些操作,可以使用here中的方法(Josh回答)。

信号通常用于在应用之间进行通信。例如,auth app发送user_logged_in信号。因此,如果您想在用户登录时执行某些操作,则只需处理此信号,无需修补应用程序。

答案 1 :(得分:1)

这是我做的:

# in models.py
@receiver(pre_save, sender=User, dispatch_uid='get_active_user_once')
def new_user_activation_handler(sender, instance, **kwargs):
    if instance.is_active and User.objects.filter(pk=instance.pk, is_active=False).exists():
        profile = User.objects.get(pk=instance.pk).get_profile()
        RecentActivity.objects.create(content_object=profile, event_type=1, timestamp=datetime.datetime.now())