【问题标题】:django: connecting to existing signal failsdjango:连接到现有信号失败
【发布时间】:2013-05-16 13:24:20
【问题描述】:

我开始使用 django_openid_auth (https://launchpad.net/django-openid-auth),它工作得很好。

我设法连接到我的 openid 提供程序并获得用户身份验证。事情是在 django_open_auth.views.login_complete 有这个块:

if user is not None:
    if user.is_active:
        auth_login(request, user)
        response = HttpResponseRedirect(sanitise_redirect_url(redirect_to))

        # Notify any listeners that we successfully logged in.
        openid_login_complete.send(sender=UserOpenID, request=request,
            openid_response=openid_response)

        return response
    else:
        return render_failure(request, 'Disabled account')

注意#notify 注释。

我创建了自己的 django-openid-auth OpenIDBackend 类的 OpenIdBackend 子类,并将其放入自己项目的 core.authentication.openidbackend 中

在该文件中有: 从 django_openid_auth.signals 导入 o​​penid_login_complete

def update_request(sender, **kwargs):
    logger.debug('test')

openid_login_complete.connect(update_request)

但调试行永远不会出现在日志中。

那么我做错了什么?我检查了其他一些 django 信号线程,其中一个说导入必须完全相同,否则不会出现连接。

但我怎么能调试呢?问题出在哪里 - 连接是否永远不会发生,因为我将连接放置在错误的位置或者是其他地方的问题?我怎样才能找到这个?

艾伦

编辑:我立即尝试了建议的所有内容并且我得到了它的工作。我将信号放入单独的文件中,将其导入正确的位置,并遵循 karthikr (https://stackoverflow.com/users/1628832/karthikr) 给出的建议。我还注意到我的记录器没有使用正确的日志记录配置,所以一切可能都在早些时候工作,只是日志记录不起作用。

所以是的:)。当你感觉不舒服时不应该工作:)。谢谢大家的帮助。

【问题讨论】:

  • openid_login_complete.connect(update_request) 更改为 openid_login_complete.connect(update_request, instance) 它需要一个发送者实例。
  • 对不起,我不太明白,您要订阅openid_login_complete 信号吗?
  • 是的,我想在信号上升(发送、触发等)之后做一些事情。

标签: django django-signals django-openid-auth


【解决方案1】:

你在哪里对信号回调进行编码?您是否在发送信号之前导入注册回调的模块?

例如,我在my_app/signals.py 中使用了信号和编码。后来我去my_app/models.py,加上一行:

import my_app.signals

你写回调的文件must be imported before the signals raises:

这段代码应该放在哪里? 您可以将信号处理和注册代码放在您喜欢的任何地方。但是,您需要确保在早期导入它所在的模块,以便在需要发送任何信号之前注册信号处理。这使您的应用程序的 models.py 成为注册信号处理程序的好地方。

您也可以尝试注册@register 装饰器。这几乎是一样的,但你可以尝试看看它是否能以另一种方式工作:

from django_openid_auth.signals import openid_login_complete
from django.dispatch import receiver

@receiver(openid_login_complete)
def update_request(sender, **kwargs):
    logger.debug('test')

希望有帮助!

【讨论】:

  • 但是在信号出现之前导入回调的事情......我怎样才能确保发生这种情况?
  • 在什么文件中定义了您的信号回调以及您在哪里导入它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
相关资源
最近更新 更多