Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接django注册信号_Django_Django Registration - Fatal编程技术网

连接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()的替代品看起来不错。更多信息