Maison >développement back-end >Tutoriel Python >Comprendre les signaux à Django
Ce tutoriel explore Django Signals, un puissant mécanisme de communication dans les projets Django. Nous couvrirons leur rôle dans le maintien du code modulaire et évolutif, examinerons les signaux intégrés et montrer comment créer des signaux personnalisés.
Les grands projets Django comprennent souvent plusieurs applications (par exemple, la gestion des utilisateurs, les commandes, les produits, les paiements dans un système de commerce électronique). Bien que chaque application se concentre sur une fonction spécifique, elles doivent interagir de manière transparente. Les signaux facilitent cette communication, permettant aux applications de réagir aux événements d'autres applications sans couplage serré. Par exemple, l'application products
peut mettre à jour l'inventaire lorsque l'application orders
confirme une commande. Le répartiteur de signaux de Django agit comme un intermédiaire, permettant cette communication découplée.
Concepts clés:
Comprendre les signaux Django:
Les signaux Django sont un système de notification. "Les expéditeurs" notifiernt "les récepteurs" lorsqu'ils se produisent spécifiques. Cela permet aux applications découplées de réagir aux événements ailleurs dans l'application. Dans notre exemple, l'application orders
envoie un signal lors de la confirmation de commande, et l'application products
, ayant inscrit pour recevoir ce signal, met à jour son inventaire.
Fonctionnement du signal:
Les signaux fonctionnent de manière similaire au modèle de pub-sub. L'expéditeur de signaux est l'éditeur et le récepteur est l'abonné. Un récepteur doit s'inscrire (souscrire) pour recevoir un signal.
expéditeurs et récepteurs:
Un expéditeur de signal est tout objet Python émet un signal. Un récepteur est une fonction ou une méthode Python exécutée en réponse à un signal envoyé. Notez que certains signaux (en particulier ceux intégrés) sont envoyés indépendamment des récepteurs enregistrés.
Configuration d'un exemple de projet Django:
Pour illustrer l'utilisation du signal, nous créerons un exemple de projet de commerce électronique:
mkdir my_shop
virtualenv
(installer avec pip install virtualenv
). Créez et activez l'environnement (virtualenv venv
, puis activez-le selon votre système d'exploitation). pip install Django
django-admin startproject my_shop .
python manage.py startapp products
et python manage.py startapp orders
. Ajoutez les deux applications à INSTALLED_APPS
dans settings.py
. Product
(dans products/models.py
) et Order
(dans orders/models.py
). Exécuter les migrations (python manage.py makemigrations
et python manage.py migrate
). Django Signals Basics:
Signal
et receiver
de django.dispatch
. orders/signals.py
): order_confirmed = Signal()
import orders.signals
et import products.signals
à la méthode ready()
dans chaque application apps.py
. order_confirmed.send(sender=order, ...)
dans la vue de l'application orders
pour envoyer le signal après confirmation de commande. @receiver(order_confirmed)
dans products/signals.py
pour créer une fonction qui met à jour l'inventaire lorsque order_confirmed
est reçu. Signaux Django intégrés:
Django fournit de nombreux signaux intégrés, accessibles via des modules comme django.db.models.signals
(signaux modèles) et django.core.signals
(signaux de demande / réponse). Les exemples incluent pre_save
, post_save
, request_started
et request_finished
. Ceux-ci sont automatiquement envoyés par le cadre.
en utilisant des signaux intégrés:
L'utilisation de signaux intégrés est similaire aux signaux personnalisés, mais vous n'avez pas besoin de les envoyer manuellement. Par exemple, utilisez @receiver(post_save, sender=Order)
pour connecter un récepteur au signal post_save
pour le modèle Order
.
Exemples pratiques:
post_save
sur le modèle User
pour créer automatiquement un profil Customer
lorsqu'un nouvel utilisateur est créé. post_save
sur le modèle Comment
pour envoyer des notifications par e-mail aux auteurs de blog lorsque de nouveaux commentaires sont publiés. Conclusion:
Les signaux Django fournissent un mécanisme puissant pour la communication découplée dans vos applications. En comprenant et en utilisant des signaux, vous pouvez créer des projets Django plus modulaires, maintenables et évolutifs.
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!