フレームワークが操作を実行するときに分離するために、Django には「シグナルディスパッチ」が提供されています。平たく言えば、シグナルにより、何らかのアクションが発生したときに、特定の送信者が一部の受信者に警告を発することができます。
Django はシグナリング メカニズムを提供します。実際、これはオブザーバー パターンであり、パブリッシュ/サブスクライブ (パブリッシュ/サブスクライブ) とも呼ばれます。何らかのアクションが発生するとシグナルが発行され、シグナルをリッスンする関数が実行されます。
Django には、次のようないくつかの組み込みシグナルがあります。
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请求时发送
私たちがしなければならないことは、受信機関数を登録することです。たとえば、各リクエストが完了した後に行を印刷したい場合です。
コールバック メソッドを使用して登録できます。
# receiver def my_callback(sender, **kwargs): print("Request finished!") # connect from django.core.signalsimport request_finished request_finished.connect(my_callback)
デコレータ メソッドを使用して登録することもできます。次のコードは上記と完全に同等です。
from django.core.signalsimport request_finished from django.dispatchimport receiver @receiver(request_finished) def my_callback(sender, **kwargs): print("Request finished!")
receiverコールバック関数送信者に加えて、pre_save関数などの他のパラメータも使用できます:
sender: sender (pre_saveの場合、モデルクラス)
インスタンス: インスタンス
raw
using
update_fields
post_save() は、リンクされたいくつかの updates をサポートできる比較的実用的な関数です。毎回ビューに書き込ませる代わりに。例: ユーザーが返金申請を送信した場合、注文の ステータス を「返金済み」に変更する必要があります。シグナリング メカニズムは、どこでも変更することなく使用できます。
@receiver(post_save, sender=RefundForm) deforder_state_update(sender, instance, created, **kwargs): instance.order.state = REFUNDING instance.order.save() # 这里,order是refundform的一个外键
もちろん、返金注文をキャンセルしてステータスを元に戻すなど、ここでより包括的に記述することもできます。
Observer は非常に実用的な 設計パターン であり、Django はユーザーが一部の信号をカスタマイズすることもサポートしています。
【関連推奨事項】
1. 特別な推奨事項: 「php Programmer Toolbox」V0.1 バージョンのダウンロード
以上がDjangoのオブザーバーパターンの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。