logo oujood
🔍

Les signaux dans Django

Faites communiquer vos applications de manière élégante et découplée.

OUJOOD.COM

Dans un projet qui grandit, on a souvent besoin qu'une action en déclenche une autre. Par exemple, envoyer un e-mail de bienvenue dès qu'un utilisateur s'inscrit, ou créer un profil dès qu'un compte est créé. On pourrait écrire ce code dans la vue, mais cela rendrait le code lourd et difficile à maintenir. C'est là que les signaux entrent en jeu.

Le concept de l'émetteur et du récepteur

Le système de signaux de Django fonctionne comme une radio. Un événement se produit (l'émetteur envoie un signal) et d'autres parties de votre code "écoutent" ce signal pour agir en conséquence (le récepteur). L'avantage majeur est le découplage : l'émetteur n'a pas besoin de savoir qui l'écoute, ce qui rend votre code beaucoup plus propre.

Les signaux les plus courants

La plupart du temps, vous travaillerez avec les signaux liés aux modèles de base de données :

  • pre_save : Envoyé juste avant qu'un objet ne soit enregistré.
  • post_save : Envoyé juste après l'enregistrement réussi en base.
  • pre_delete : Envoyé juste avant la suppression d'un objet.
  • post_delete : Envoyé juste après la suppression.

Mise en pratique avec @receiver

Pour créer un récepteur, on utilise généralement un décorateur. Voici comment automatiser la création d'un profil dès qu'un nouvel utilisateur est enregistré. C'est une technique que je vous suggère d'utiliser systématiquement pour vos modèles liés.

  📋 Copier le code

from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
from .models import Profile

@receiver(post_save, sender=User)
def creer_profil_utilisateur(sender, instance, created, **kwargs):
    if created:
        # Si l'utilisateur vient d'être créé, on lui fait un profil
        Profile.objects.create(user=instance)

Où placer ce code ?

C'est un point qui perd souvent les débutants. Je vous conseille de créer un fichier signals.py dans votre application. Mais attention : pour que Django les prenne en compte, vous devez les importer dans la méthode ready() de votre fichier apps.py. Sans cela, vos signaux resteront muets.

Les signaux sont parfaits pour les actions automatiques, mais pour améliorer la rapidité de votre site, il existe une autre technique indispensable : le système de cache Django.

Par carabde | Mis à jour le 08/05/2026