Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung des Beobachtermusters in Django

Detaillierte Erklärung des Beobachtermusters in Django

Y2J
Y2JOriginal
2017-05-13 13:47:001906Durchsuche

„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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn