Exercices Concepts Web & Django Middleware de timing avec headers
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

Middleware de timing avec headers

En production, on veut mesurer le temps de traitement de chaque requête. Un middleware de timing mesure le temps entre l'arrivee de la requête et l'envoi de la réponse, puis ajoute cette information dans un header HTTP de la réponse.

C'est exactement ce que font des outils comme Django Debug Toolbar ou New Relic, mais a un niveau plus fin.

Le module time de Python permet de mesurer ca : time.time() retourne le nombre de secondes ecoulees depuis le 1er janvier 1970. En faisant la difference entre deux appels, tu obtiens la duree.

Écris un middleware TimingMiddleware (new style) qui :
- Dans __call__, note le temps de debut
- Appelle get_response pour obtenir la réponse
- Calcule la duree en millisecondes
- Ajoute le header 'X-Processing-Time-Ms' avec la duree arrondie a 2 decimales (en string)
- Retourne la réponse

Exemple :

import time
mw = TimingMiddleware(lambda r: HttpResponse('ok'))
req = HttpRequest()
resp = mw(req)
resp['X-Processing-Time-Ms'] contient quelque chose comme '0.02'

Tests (3/4)

Header present
import time
mw = TimingMiddleware(lambda r: HttpResponse('ok'))
req = HttpRequest()
resp = mw(req)
assert 'X-Processing-Time-Ms' in resp
Header est un nombre
import time
mw = TimingMiddleware(lambda r: HttpResponse('ok'))
req = HttpRequest()
resp = mw(req)
assert float(resp['X-Processing-Time-Ms']) >= 0
Response preservee
import time
mw = TimingMiddleware(lambda r: HttpResponse('hello', status=201))
req = HttpRequest()
resp = mw(req)
assert resp.status_code == 201

+ 0 tests cachés

Indices (3 disponibles)

solution.py