„Signal Dispatch“ wird in Django zur Entkopplung bereitgestellt, wenn das Framework Vorgänge ausführt. Laienhaft ausgedrückt ermöglicht ein Signal einem bestimmten Absender, einige Empfänger zu benachrichtigen, wenn eine Aktion stattfindet.
Django bietet einen Signalmechanismus. Tatsächlich handelt es sich um das Beobachtermuster, auch Publish-Subscribe (Publish/Subscribe) genannt. Wenn eine Aktion ausgeführt wird, wird ein Signal ausgegeben und anschließend wird die Funktion ausgeführt, die das Signal abhört.
Django verfügt über einige integrierte Signale, wie zum Beispiel:
django.db.models.signals.pre_save 在某个Model保存之前调用 django.db.models.signals.post_save 在某个Model保存之后调用 django.db.models.signals.pre_delete 在某个Model删除之前调用 django.db.models.signals.post_delete 在某个Model删除之后调用 django.core.signals.request_started 在建立Http请求时发送 django.core.signals.request_finished 在关闭Http请求时发送
Was wir tun müssen, ist eine Empfängerfunktion zu registrieren. Wenn Sie beispielsweise nach Abschluss jeder Anfrage eine Zeile drucken möchten.
kann über einen Rückruf registriert werden:
# receiver def my_callback(sender, **kwargs): print("Request finished!") # connect from django.core.signalsimport request_finished request_finished.connect(my_callback)
kann auch über einen Dekorator registriert werden. Der folgende Code entspricht vollständig dem oben genannten.
from django.core.signalsimport request_finished from django.dispatchimport receiver @receiver(request_finished) def my_callback(sender, **kwargs): print("Request finished!")
EmpfängerRückruffunktion Neben der Verwendung des Absenders können Sie auch einige andere Parameter verwenden, beispielsweise für die pre_save-Funktion:
Absender: Absender (wenn es pre_save ist, ist es eine Modellklasse)
Instanz: Instanz
raw
using
update_fields
post_save() ist eine praktischere Funktion, die unterstützen kann einige Verknüpfungen Aktualisiert. Anstatt, dass wir es jedes Mal in die Ansicht schreiben. Beispiel: Wenn ein Benutzer einen Rückerstattungsantrag einreicht, müssen wir den -Status der Bestellung in den Status „Erstattet“ ändern. Sie können den Signalisierungsmechanismus nutzen, ohne ihn überall ändern zu müssen.
@receiver(post_save, sender=RefundForm) deforder_state_update(sender, instance, created, **kwargs): instance.order.state = REFUNDING instance.order.save() # 这里,order是refundform的一个外键
Natürlich können Sie hier immer umfassendere Dinge schreiben, wie zum Beispiel die Stornierung des Rückerstattungsauftrags und die Rückänderung des Status.
Observer ist ein sehr praktisches Entwurfsmuster. Django unterstützt auch benutzerdefinierte Signale.
【Verwandte Empfehlungen】
1. Besondere Empfehlung: Version „php Programmer Toolbox“ V0.1 herunterladen
2. Python kostenloses Video-Tutorial
3. Python objektorientiertes Video-Tutorial
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Beobachtermusters in Django. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!