【问题标题】:Connecting a django-registration signal连接 django-registration 信号
【发布时间】:2010-08-07 15:24:26
【问题描述】:

我有一个函数:

def create(sender, **kw):
  [...]

当调用来自 django-registration 的 user_activated 信号时应该调用它。

我使用这个连接信号和函数:

from registration.signals import user_activated
[...]
post_save.connect(create, sender=user_activated, dispatch_uid="users-atactivation-signal")

但是当用户点击他通过电子邮件获得的激活链接时,该函数不会被调用。

我在这里想念什么。

【问题讨论】:

    标签: django django-registration


    【解决方案1】:

    这样的函数:

    def create(sender, user, request, **kwarg):
    [...]
    

    还有这样的连接调用:

    user_activated.connect(create)
    

    完成这项工作。我的 signals.py 文件中有这些。

    【讨论】:

    【解决方案2】:

    如果实际未安装 django-registration 应用程序,而只是将其复制到项目中,则侦听信号的代码将无法正确调用。

    来自 django-registration v0.8 documentation:

    我有监听注册/激活信号的函数, 但他们没有被叫到!

    最常见的原因是将 django-registration 放在 Python 导入路径上的子目录,而不是 像往常一样将其直接安装到导入路径上。从导入 在这种情况下,django-registration 可能会导致各种问题,包括 错误地连接信号处理程序。例如,如果您要 将 django-registration 放在名为 django_apps 的目录中,然后 以这种方式引用它,您最终会遇到以下情况 你的代码是这样做的:

    from django_apps.registration.signals import user_registered

    但是 django-registration 会做:

    from registration.signals import user_registered

    从 Python 的角度来看 看来,这些import语句在两个中引用了两个不同的对象 不同的模块,因此信号处理程序连接到来自的信号 使用发送信号时不会调用第一个导入 第二次导入。

    为避免此问题,请遵循安装的标准做法 django-registration 直接在您的导入路径上并始终引用 通过它自己的模块名称对其进行注册:注册(通常,它是 遵循正常的 Python 安装实践总是一个好主意 并使用 Django 应用程序)。

    【讨论】:

      【解决方案3】:

      user_activated 本身就是一个信号。所以你必须用参数发送自己。除了发件人,它需要2个参数,即用户,请求

      user_activated.send(sender=Foo, user=request.user, request=request)
      

      Foo 是用于激活用户的后端类。

      【讨论】:

      • 叫我笨蛋,但我不明白。我以为我必须将信号与要调用的函数连接起来。如果我按照你说的做,Foo 将是“user_activated”,对吗?但是,我该把要调用的函数放在哪里呢?我可能对信号的工作有很大的误解,也许你能帮帮我?
      【解决方案4】:

      将信号处理方法连接到该信号的代码是否确实被加载了? (您可以在它之后立即使用打印语句进行测试)。您可以通过从应用程序的__init__.py 导入信号处理程序来确保为给定应用程序加载信号处理程序:

      from nameofapp.nameoffilewithhandlersinit import *

      PS。这是 dispatch_uid 中的拼写错误,还是故意命名的?

      【讨论】:

        猜你喜欢
        • 2013-09-18
        • 1970-01-01
        • 2015-05-18
        • 2011-06-04
        • 2014-04-22
        • 1970-01-01
        • 2016-04-27
        • 2014-04-15
        • 2023-03-03
        相关资源
        最近更新 更多