有办法查看Django中设置了哪些信号吗?
cedebl8k1#
它并没有在文档中公开,但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)
hof1towb2#
有一个django应用程序叫做django-debug-toolbar,它在所有django服务的页面顶部添加了一个小工具栏,提供与页面渲染后端相关的信息,例如执行了多少次查询,每个查询花费了多少时间,等等。它还能打印出信号。我在应用程序中不使用信号,所以我从来没有使用过这个功能,但它就在那里。
j9per5c43#
如果您只想列出特定型号上特定信号的连接接收器,可以查看_live_receivers。例如,如果你想列出一个名为MyModel的模型的连接的post_保存钩子,你可以这样做:
_live_receivers
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
has_listeners
i34xakig4#
我写了一个小命令来显示所有的信号监听器:https://gist.github.com/1264102您可以将其修改为仅显示信号。
4条答案
按热度按时间cedebl8k1#
它并没有在文档中公开,但Signal只是一个类,它包含一个在事件中调用的接收器列表。您可以手动检查此列表:
hof1towb2#
有一个django应用程序叫做django-debug-toolbar,它在所有django服务的页面顶部添加了一个小工具栏,提供与页面渲染后端相关的信息,例如执行了多少次查询,每个查询花费了多少时间,等等。它还能打印出信号。我在应用程序中不使用信号,所以我从来没有使用过这个功能,但它就在那里。
j9per5c43#
如果您只想列出特定型号上特定信号的连接接收器,可以查看
_live_receivers
。例如,如果你想列出一个名为MyModel的模型的连接的post_保存钩子,你可以这样做:我在Django源代码中通过查找
has_listeners
的工作方式发现了这种方法:https://github.com/django/django/blob/3eb679a86956d9eedf24492f0002de002f7180f5/django/dispatch/dispatcher.py#L153i34xakig4#
我写了一个小命令来显示所有的信号监听器:https://gist.github.com/1264102
您可以将其修改为仅显示信号。