连接django注册信号
我有一个功能:连接django注册信号,django,django-registration,Django,Django Registration,我有一个功能: def create(sender, **kw): [...] 当调用来自django registration的用户激活信号时,应该调用它 我使用以下方式连接信号和功能: from registration.signals import user_activated [...] post_save.connect(create, sender=user_activated, dispatch_uid="users-atactivation-signal") 但是当用户通
def create(sender, **kw):
[...]
当调用来自django registration的用户激活信号时,应该调用它
我使用以下方式连接信号和功能:
from registration.signals import user_activated
[...]
post_save.connect(create, sender=user_activated, dispatch_uid="users-atactivation-signal")
但是当用户通过电子邮件点击激活链接时,该函数不会被调用
我在这里错过了什么。激活的用户本身就是一个信号。所以你必须用参数发送它自己。它需要除发送方之外的2个参数,即用户、请求
user_activated.send(sender=Foo, user=request.user, request=request)
Foo
是用于激活用户的后端类。是将信号处理方法连接到正在加载的信号的代码吗?(您可以在打印后立即使用打印语句进行测试)。您可以通过从某个应用的\uuuu init\uuuuuuuuuy.py
导入信号处理程序来确保加载该应用的信号处理程序:
来自nameofapp.nameoffilewithhandlersinit导入*
另外,这是发送uid中的输入错误,还是故意使用的名称?是这样的函数:
def create(sender, user, request, **kwarg):
[...]
user_activated.connect(create)
和这样的连接呼叫:
def create(sender, user, request, **kwarg):
[...]
user_activated.connect(create)
他做这项工作。我的signals.py文件中有这些文件。如果没有实际安装django注册应用程序,而只是将其复制到项目中,则侦听信号的代码将无法正确调用 从django注册v0.8: 我有函数监听注册/激活信号, 但他们没有接到电话 最常见的原因是将django注册放在 位于Python导入路径上的子目录,而不是 正常情况下直接将其安装到导入路径上。从进口 在这种情况下,django注册可能会导致各种问题,包括 错误地连接信号处理程序。例如,如果你要 将django注册放在名为django_apps的目录中,然后 以这种方式引用它,最终会出现这样一种情况: 您的代码执行以下操作:
来自django_apps.registration.signals导入已注册用户
但django注册将做:
from registration.signals导入用户注册
从Python的角度看
当然,这些import语句引用两个不同的对象
不同的模块等信号处理器连接到信号源
当使用
第二项进口
要避免此问题,请遵循安装的标准实践
直接在导入路径上注册django,并始终引用
通过它自己的模块名注册(通常是
遵循正常的Python实践进行安装始终是一个好主意
以及使用Django应用程序)
叫我傻瓜,但我不明白。我想我必须把信号和函数连接起来才能调用。如果我照你说的做,Foo将是“用户激活的”,对吗?但是我应该把函数放在哪里调用呢?我可能对信号工作有一个很大的误解,也许你能帮我解决吗?我试图在这里实现同样的事情,但我无法让它工作,我的代码在这里。也请检查一下,“@receiver”装饰器作为connect()的替代品看起来不错。更多信息