2013-05-16 46 views
0

我开始使用django_openid_auth(https://launchpad.net/django-openid-auth),它工作得很好。django:连接到现有信号失败

我设法连接到我的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的身份验证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信号线程,其中一个表示导入必须完全相同,否则连接不会出现。

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

Alan

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

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

+1

更改'openid_login_complete。连接(update_request)'到'openid_login_complete.connect(update_request,instance)'它期待一个发送者实例。 – karthikr

+0

对不起,但我不太明白,你想订阅'openid_login_complete'信号吗? –

+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') 

希望帮助!

+0

我曾尝试用装饰器,但它也没有工作。 –

+0

但是在信号引发之前导入了回调函数的问题......我如何确保这种情况发生? –

+0

你的信号回调是在什么文件中定义的,你在哪里导入它? –