有办法列出Django信号吗?

ewm0tg9j  于 2023-10-21  发布在  Go
关注(0)|答案(4)|浏览(158)

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

cedebl8k

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)
hof1towb

hof1towb2#

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

j9per5c4

j9per5c43#

如果您只想列出特定型号上特定信号的连接接收器,可以查看_live_receivers。例如,如果你想列出一个名为MyModel的模型的连接的post_保存钩子,你可以这样做:

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

i34xakig

i34xakig4#

我写了一个小命令来显示所有的信号监听器:https://gist.github.com/1264102
您可以将其修改为仅显示信号。

相关问题