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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import timefrom django.http import JsonResponseclass TimingMiddleware:def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):start = time.perf_counter()response = self.get_response(request)duration = time.perf_counter() - startresponse['X-Request-Duration'] = f'{duration:.4f}s'return responsedef 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