Maison >développement back-end >Tutoriel Python >Explication détaillée du modèle d'observateur dans Django
"Envoi du signal" est fourni dans Django pour le découplage lorsque le framework effectue des opérations. En termes simples, un signal permet à un expéditeur spécifique d'alerter certains destinataires lorsqu'une action se produit.
Django fournit un mécanisme de signalisation. En fait, il s’agit du modèle observateur, également appelé publication-abonnement (Publish/Subscribe). Lorsqu'une action se produit, un signal est émis, puis la fonction qui écoute le signal sera exécutée.
Django a des signaux intégrés, tels que :
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请求时发送
Ce que nous devons faire est d'enregistrer une fonction de récepteur. Par exemple, si vous souhaitez imprimer une ligne une fois chaque demande terminée.
peut être enregistré à l'aide d'un rappel :
# receiver def my_callback(sender, **kwargs): print("Request finished!") # connect from django.core.signalsimport request_finished request_finished.connect(my_callback)
peut également être enregistré à l'aide d'un décorateur. Le code suivant est tout à fait équivalent à celui ci-dessus.
from django.core.signalsimport request_finished from django.dispatchimport receiver @receiver(request_finished) def my_callback(sender, **kwargs): print("Request finished!")
récepteurFonction de rappel En plus d'utiliser l'expéditeur, vous pouvez également utiliser d'autres paramètres, comme pour la fonction pre_save :
sender : sender (s'il s'agit de pre_save, c'est une classe de modèle)
instance : instance
raw
using
update_fields
post_save() est une fonction plus pratique qui peut prendre en charge quelques liens Mise à jour. Au lieu de nous demander de l'écrire dans la vue à chaque fois. Par exemple : si un utilisateur soumet une demande de remboursement, nous devons modifier le statut de la commande en statut "Remboursé". Vous pouvez utiliser le mécanisme de signalisation sans avoir à le modifier partout.
@receiver(post_save, sender=RefundForm) deforder_state_update(sender, instance, created, **kwargs): instance.order.state = REFUNDING instance.order.save() # 这里,order是refundform的一个外键
Bien sûr, vous pouvez écrire ici des choses de plus en plus complètes, comme annuler la commande de remboursement et modifier le statut.
Observer est un modèle de conception très pratique, et Django aide également les utilisateurs à personnaliser certains signaux.
【Recommandations associées】
1. Recommandation spéciale : Téléchargement de la version V0.1 de "php Programmer Toolbox"
2. Tutoriel vidéo gratuit Python
3 Tutoriel vidéo orienté objet Python
.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!