django在自定义信号中传递争论

时间:2015-07-02 11:04:04

标签: python django django-signals

我有自定义信号功能:

def notify_after_registration(sender, **kwargs):
    email_subject = 'Account confirmation'
    email_body = "Hey {}, thanks for signing up. To activate your account, click this link within \
        48hours http://127.0.0.1:8000/accounts/register_confirm/{}".format(username, activation_key)

    send_mail(email_subject, email_body, settings.EMAIL_HOST_USER,
        [email], fail_silently=False)


post_save.connect(notify_after_registration(sender), sender=User)

这里我从我的视图生成激活密钥并将其保存在不同的模型中。

现在如何在此处传递此激活密钥和用户名。

谢谢

2 个答案:

答案 0 :(得分:0)

您可以将参数作为关键字参数(kwargs)传递为activation_key=...username=...等等。接收者将他们带入kwargskwargs['activation_key']kwargs['username']

参考:Django docs: Signals

编辑:您没有明确调用该函数。只要有必要且有意义(毕竟它是自定义信号),您就会使用关键字触发信号,并且框架会调用适当的接收器正确传递参数。

答案 1 :(得分:0)

这一行错了:

post_save.connect(notify_after_registration(sender), sender=User)

连接时不应在此处调用接收器功能

你应该这样做:

post_save.connect(notify_after_registration, sender=User)

post_save是一个内置的Django信号,因此会自动使用sender arg发送。

一切都在文档中:
https://docs.djangoproject.com/en/1.8/topics/signals/#receiver-functions