Connecter correctement les récepteurs
Enregistrez les signaux dans apps.py pour éviter les pièges.
Connecter correctement les récepteurs est une leçon Django Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Django Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Django Academy comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Receivers Must Be Imported
A receiver only listens if Django actually imports the module it lives in. If the file is never loaded, the signal silently does nothing.
The Classic Trap
Putting receivers in models.py sometimes works by luck, and sometimes not. That fragility is the connection problem you want to avoid.
Use a signals.py File
The clean pattern is a dedicated signals.py inside your app that holds every receiver for that app in one obvious place.
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Profile)
def sync(sender, instance, **kwargs):
passThe AppConfig.ready Hook
Django calls ready() on each app config once at startup. That is the official place to load your signal handlers.
Import Inside ready
In apps.py, import your signals module from inside ready so receivers register exactly once when the app boots.
from django.apps import AppConfig
class BlogConfig(AppConfig):
name = "blog"
def ready(self):
from . import signalsPoint default_app_config
Make sure your app uses that config. Modern Django auto-discovers apps.py, so a matching AppConfig class is usually enough.
connect Without a Decorator
Instead of @receiver, you can wire a handler with connect. It does the same job and is handy for dynamic registration.
post_save.connect(sync, sender=Profile)Avoiding Double Firing
If a module is imported twice, a receiver can run twice. Centralizing registration in ready() keeps each handler connected only once.
The dispatch_uid Safety Net
Pass a unique dispatch_uid so Django refuses to connect the same receiver more than once, even across reimports.
post_save.connect(sync, sender=Profile, dispatch_uid="profile_sync")Disconnecting Receivers
You can also call disconnect to stop a handler, which is useful inside tests that should not trigger side effects.
Keep One App's Signals Together
Grouping each app's handlers in its own signals.py keeps reactions discoverable and stops them from scattering across the codebase.
Quick Check
Recall where signal handlers should be registered.
Recap: Wiring Signals Right
You learned to keep receivers in a signals.py, import them from AppConfig.ready(), and use dispatch_uid to prevent duplicate connections. ✅
Questions Fréquemment Posées
La leçon « Connecter correctement les récepteurs » est-elle gratuite ?
Oui — le texte complet de « Connecter correctement les récepteurs » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Django Academy, passe à CoddyKit PRO. Le cours Django Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Connecter correctement les récepteurs » ?
Enregistrez les signaux dans apps.py pour éviter les pièges. Tu pratiques Django Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Django Academy ?
Aucune expérience préalable n'est requise. Django Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Connecter correctement les récepteurs » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Django Academy ?
Oui. Chaque leçon Django Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Signaux post_save et pre_delete
- Connecter correctement les récepteurs
- Écrire un intergiciel personnalisé
- Ordre des intergiciels et process_view