2009-07-06 5 views

ответ

9

Там в Джанго приложение под названием django-debug-toolbar который добавляет немного панель инструментов в верхней части всех Джанго служили страницы, обеспечивающие информацию, связанную с бэкэндом отрисовки страницы, например, сколько запросов были казнены, сколько времени каждый из них взял, и т. д. Он также выводит сигналы. Я не использую сигналы в своем приложении, поэтому я никогда не использовал эту функцию, но она есть.

27

Это действительно не отображается в документах, но 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 
7

Я написал небольшую команду, которая показывает все слушатель сигналов: https://gist.github.com/1264102

Вы можете изменить его, чтобы показать только сигналы.

0

Если вы хотите перечислить только подключенные приемники для определенного сигнала на определенной модели, вы можете посмотреть _live_receivers. Например, если вы хотите получить список подключенных post_save крюки для модели с именем MyModel, вы можете сделать:

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

Смежные вопросы