【问题标题】:debugging django signals' problems调试 django 信号的问题
【发布时间】:2011-08-26 01:45:19
【问题描述】:

我在连接到 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 版本是否正常工作。我已经用提到的博客示例应用程序中的版本切换了我的版本。它没有改变观察到的行为。

【问题讨论】:

标签: django django-signals django-registration


【解决方案1】:

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

您可以在this question 中找到有关在何处最好地连接您的信号的更多信息。

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

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

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

  • 信号列表、参数和接收器

【讨论】:

  • 上述步骤是我已经完成的。我的 user_registered 函数开头的调试日志以及将其放在 regbackend.py 中都没有帮助。我也使用过 django-debug-toolbar,但它没有显示 user_registered 信号。不在我的应用程序中,也不在工作中,(dmitko.ru/?p=546)
【解决方案2】:

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

【讨论】:

  • 我已经尝试过了,但正如我在我的问题中所写的那样,它效果很好。我不知道如何调试我的应用程序。我很确定我做了你在你的应用程序中所做的所有事情(显然我错了,因为我的应用程序不工作;-))。我已经包含了 django-debug-toolbar 但它没有显示 user_registered 信号,无论是在我的应用程序中还是在您的应用程序中。你知道如何调试在 django 中发送信号的问题吗?
【解决方案3】:

确保连接到信号的代码和发送信号的代码都以相同的路径导入。例如,如果您将信号连接到:

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

然后,当您发送此信号时,您必须将其导入

from myapp.registration.signals import user_registered

(注意 myapp.)和 not

from registration.signals import user_registered

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

【讨论】:

    猜你喜欢
    • 2016-06-10
    • 2023-03-03
    • 1970-01-01
    • 2022-06-27
    • 2014-12-18
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多