OUJOOD.COM
Pour bien comprendre Django, il faut imaginer votre application comme le cœur d'un oignon. Chaque requête envoyée par un utilisateur doit traverser plusieurs couches avant d'atteindre votre vue, et chaque réponse doit refaire le chemin inverse pour repartir vers le navigateur. Ces couches, ce sont les middlewares.
À quoi sert un middleware ?
C'est un composant qui s'exécute de manière globale. Au lieu d'écrire le même code dans chaque vue (par exemple pour vérifier si un site est en maintenance ou pour enregistrer des statistiques), vous l'écrivez une seule fois dans un middleware. Il intercepte la requête à l'entrée et peut même décider de la bloquer avant qu'elle n'arrive à destination.
L'ordre est primordial
Dans votre fichier settings.py, la liste MIDDLEWARE n'est pas ordonnée au hasard. Django les exécute du haut vers le bas pour la requête, et du bas vers le haut pour la réponse. Si vous placez un middleware de sécurité après un middleware qui traite les données, vous risquez d'ouvrir des failles. Je vous conseille de toujours laisser les middlewares natifs de Django en haut de la liste.
Créer son propre middleware
Créer un middleware personnalisé est plus simple qu'il n'y paraît. Il s'agit d'une classe Python qui prend une fonction get_response lors de son initialisation. Voici une structure de base pour un middleware qui ajouterait un message simple à chaque console lors d'une visite :
class SimpleMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
# Code exécuté AVANT la vue
print("Une requête arrive !")
response = self.get_response(request)
# Code exécuté APRÈS la vue
print("La réponse est prête !")
return response
Une fois votre classe écrite, il suffit de l'ajouter dans vos réglages en indiquant son chemin complet (par exemple 'mon_app.middleware.SimpleMiddleware'). C'est un outil puissant, mais n'en abusez pas : trop de middlewares peuvent ralentir votre application.
Si les middlewares traitent les flux globaux, il existe un autre moyen de faire communiquer vos composants de manière plus ciblée. C'est ce que nous allons voir avec les signaux Django.
Par carabde | Mis à jour le 08/05/2026