2011-05-15 48 views
1

我在连接到django中的信号时遇到问题。我一直在遵循http://dmitko.ru/?p=546的教程,并试图扩展用户注册。调试django信号的问题

我有django注册正确设置。它工作正常。为了调试目的,我已经把下面的代码到我的urls.py:

from registration.signals import user_registered 

def log_user_created(sender, user, request, ** kwargs): 
    logger.debug("got USER_REGISTERED signal") 

if settings.DEBUG: 
    logger.debug("registering debug signal listeners") 
    user_registered.connect(log_user_created) 
else: 
    logger.debug("debuging signals not enabled")  

然而log_user_created函数永远不会被调用。

我的问题是:我该如何调试我的应用程序以查看user_registered信号被吞噬的位置?

注意:我检查过我的django注册版本能够正常工作。我已将我的版本与提到的博客示例应用中的版本进行了切换。它没有改变观察到的行为。

+0

您可以检查[下面的答案](http://stackoverflow.com/questions/40392042/why-does-the-signal-not-trigger/40400653#40400653)。 – Brkyrn 2016-11-04 09:56:25

回答

0

您是否尝试将user_registered.connect(user_created)放入regbackend.py(而不是urls.py),如链接的示例中所示?

你可以在this question找到一些关于在哪里最好地连接你的信号的附加信息。

要查看user_registered是否被正确调用,只需在user_created函数的开头添加调试调用即可。

django-debug-toolbar,虽然我还没有使用的特定功能,可能是另一种选择:

目前,以下面板已经 被写入,并正在努力:信号

  • 名单,他们的参数和接收器
+0

提到的步骤是我已经完成的。在我的__user_registered__函数的开头没有调试日志,也没有将它放在regbackend.py中。我也使用django-debug-toolbar,但它不显示user_registered信号。不是在我的应用程序,而是在工作中,(http://dmitko.ru/?p=546) – 2011-05-16 17:55:25

0

我创建了一个示例应用程序,你c (我相信它的工作原理) http://dmitko.ru/samples/sample_user_registration.zip

+1

我已经尝试过了,但正如我在我的问题中写的,它工作得很好。我无法弄清楚如何调试我的应用程序。我很确定我做了你在你的应用中做过的所有事情(显然我错了,因为我的应用没有工作;-))。我已经包含Django的调试工具栏,但它不显示__user_registered__信号,既不在我的应用程序也不在你的。你知道如何调试在Django中发送信号的问题吗? – 2011-05-16 21:34:08

6

确保连接到信号的代码和发送信号的代码都导入了相同的路径。例如,如果你连接一个信号:

from myapp.registration.signals import user_registered 
user_registered.connect(...) 

然后,当你发出这个信号,你必须

from myapp.registration.signals import user_registered 

进口它(注意MYAPP)和后:

from registration.signals import user_registered 

否则他们会被视为两个不同信号。