有没有办法列出Django信号?

时间:2009-07-06 15:48:08

标签: django signals django-signals

有没有办法查看Django中设置了哪些信号?

4 个答案:

答案 0 :(得分:33)

它并没有真正暴露在文档中,但Signal只是一个包含事件调用接收器列表的类。您可以手动检查此列表:

from django.db.models.signals import *

for signal in [pre_save, pre_init, pre_delete, post_save, post_delete, post_init, post_syncdb]:
    # print a List of connected listeners
    print signal.receivers

答案 1 :(得分:10)

有一个叫django的应用程序 django-debug-toolbar在所有django服务页面的顶部添加了一个小工具栏,提供与页面渲染后端相关的信息,例如执行了多少查询,每次执行了多少时间等等。它还打印出来信号。我不在我的应用程序中使用信号,所以我从未使用过该功能,但它就在那里。

答案 2 :(得分:7)

我写了一个显示所有信号监听器的小命令:https://gist.github.com/1264102

您可以修改它以仅显示信号。

答案 3 :(得分:3)

如果您只想列出特定型号上特定信号的已连接接收器,可以查看_live_receivers。例如,如果要列出名为MyModel的模型的已连接post_save挂钩,则可以执行以下操作:

from django.db.models.signals import post_save
from models import MyModel
print(post_save._live_receivers(MyModel))

我通过查找has_listeners的工作原理在Django源代码中找到了这种方法:https://github.com/django/django/blob/3eb679a86956d9eedf24492f0002de002f7180f5/django/dispatch/dispatcher.py#L153