django:连接现有信号失败

时间:2013-05-16 13:24:20

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

我开始使用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导入openid_login_complete

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

openid_login_complete.connect(update_request)

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

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

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

艾伦

编辑:我尝试了一次建议的所有内容,然后我就开始工作了。我将信号放入单独的文件中,将其导入正确的位置,并遵循karthikr(https://stackoverflow.com/users/1628832/karthikr)给出的建议。我还注意到我的记录器没有使用正确的日志记录,所以一切都可能提前工作,只是日志记录不起作用。

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

1 个答案:

答案 0 :(得分:0)

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

例如,我使用了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')

希望有所帮助!