有没有办法查看 Django 中设置了哪些信号?
问问题
5991 次
4 回答
32
它并没有真正在文档中公开,但 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
于 2009-12-25T09:12:02.990 回答
11
有一个名为 django-debug-toolbar的 django 应用程序,它在所有 django 服务页面的顶部添加了一个小工具栏,提供与页面渲染后端相关的信息,例如执行了多少查询,每个查询花费了多少时间等. 它还打印出信号。我不在我的应用程序中使用信号,所以我从未使用过该功能,但它就在那里。
于 2009-07-06T15:59:17.153 回答
8
我写了一个显示所有信号监听器的小命令:https ://gist.github.com/1264102
您可以修改它以仅显示信号。
于 2011-11-17T12:06:00.697 回答
5
如果您只想列出特定型号上特定信号的连接接收器,您可以查看_live_receivers
. 例如,如果你想为一个名为 MyModel 的模型列出连接的 post_save 钩子,你可以这样做:
from django.db.models.signals import post_save
from models import MyModel
print(post_save._live_receivers(MyModel))
我通过查找工作原理在 Django 源代码中找到了这种方法has_listeners
:https ://github.com/django/django/blob/3eb679a86956d9eedf24492f0002de002f7180f5/django/dispatch/dispatcher.py#L153
于 2017-03-28T09:56:17.933 回答