0 Tage Serie
python / expert
Snippet

Benutzerdefiniertes Django-Middleware für Request-Timing

Django-Middleware greift in den Request/Response-Zyklus ein und ermöglicht es, Anfragen zu verarbeiten, bevor sie die View erreichen, und Antworten zu modifizieren, bevor sie zurückgesendet werden. Dieses Experten-Middleware misst die Request-Verarbeitungszeit mit perf_counter für hochpräzise Zeitmessung und hängt das Ergebnis als benutzerdefinierten Header an. Der process_exception-Hook behandelt Fehler global über alle Views hinweg.

snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import time
from django.http import JsonResponse
class TimingMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
start = time.perf_counter()
response = self.get_response(request)
duration = time.perf_counter() - start
response['X-Request-Duration'] = f'{duration:.4f}s'
return response
def process_exception(self, request, exception):
return JsonResponse({'error': str(exception)}, status=500)
django
Erklärung
1
import time
Importiert das time-Modul für hochpräzise Zeitfunktionen
2
class TimingMiddleware:
Definiert eine Middleware-Klasse, die Djangos Middleware-Muster folgt
3
def __init__(self, get_response):
Django ruft dies einmal beim Serverstart auf, um das Middleware zu initialisieren
4
def __call__(self, request):
Django ruft dies für jede Anfrage auf und übergibt das Request-Objekt
5
start = time.perf_counter()
perf_counter bietet den genauesten verfügbaren monotonen Timer
6
response['X-Request-Duration'] = f'{duration:.4f}s'
Hängt Timing-Daten als benutzerdefinierten HTTP-Header für die Überwachung an