Gibt es eine Möglichkeit zu sehen, welche Signale in Django gesetzt wurden?Gibt es eine Möglichkeit, Django-Signale aufzulisten?
Antwort
Es gibt eine django app django-debug-toolbar genannt, die an der Spitze aller django eine kleine Symbolleiste fügt Seiten Informationen an das Backend der Seite Rendering, wie wie viele Abfragen ausgeführt wurden, wie viel Zeit sie jeweils nahm im Zusammenhang Bereitstellung serviert, usw. Es gibt auch Signale aus. Ich verwende keine Signale in meiner App, also habe ich diese Funktion nie benutzt, aber sie ist da.
Es ist nicht wirklich in der Dokumentation ausgesetzt, aber Signal ist nur eine Klasse, die eine Liste von Empfängern enthält, die Ereignis aufgerufen werden. Sie können diese Liste manuell überprüfen:
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
Ich schrieb wenig Befehl, der alle Signal Hörer zeigt: https://gist.github.com/1264102
Sie können es ändern, Signale nur zu zeigen.
Wenn Sie nur die angeschlossenen Empfänger für ein bestimmtes Signal an einem bestimmten Modell auflisten möchten, können Sie sich _live_receivers
ansehen. Zum Beispiel, wenn Sie die angeschlossenen post_save Haken für ein Modell namens MyModel auflisten möchten, können Sie tun:
from django.db.models.signals import post_save
from models import MyModel
print(post_save._live_receivers(MyModel))
fand ich diesen Ansatz im Code Django Quelle, indem sie nach wie has_listeners
Werke: https://github.com/django/django/blob/3eb679a86956d9eedf24492f0002de002f7180f5/django/dispatch/dispatcher.py#L153