3

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

我已经正确设置了 django-registration。它工作正常。出于调试目的,我将以下代码放入我的 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-registration 版本是否正常工作。我已经用提到的博客示例应用程序中的版本切换了我的版本。它没有改变观察到的行为。

4

3 回答 3

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

否则它们将被视为两个不同的信号。

于 2013-01-19T01:50:21.830 回答
0

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

您可以在此问题中找到有关在何处最好地连接信号的其他信息。

要查看是否user_registered正确调用,您只需在user_created函数开头添加一个调试调用。

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

目前,已编写并正在编写以下面板:

  • 信号列表,它们的参数和接收器
于 2011-05-16T06:30:45.507 回答
0

我创建了一个示例应用程序,您可以使用它(我相信它有效) http://dmitko.ru/samples/sample_user_registration.zip

于 2011-05-16T18:26:30.593 回答