python / expert
Snippet
Asynchrone Request-Kontext-Middleware zur Korrelations-ID-Injektion
Diese Middleware demonstriert die asynchrone HTTP-Request-Verarbeitung in Django, erfasst Header-Kontexte und gewährleistet die Fehlerfortpflanzung über asynchrone Grenzen hinweg.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from typing import Callable, Awaitablefrom django.http import HttpRequest, HttpResponseclass AsyncCorrelationMiddleware:def __init__(self, get_response: Callable[[HttpRequest], Awaitable[HttpResponse]]):self.get_response = get_responseasync def __call__(self, request: HttpRequest) -> HttpResponse:request.correlation_id = request.headers.get("X-Correlation-ID", "anon")try:response = await self.get_response(request)response["X-Correlation-ID"] = request.correlation_idreturn responseexcept Exception as exc:request.meta_error = str(exc)raise
django
Erklärung
1
class AsyncCorrelationMiddleware:
Defiert eine asynchrone Middleware-Klasse, die mit Djangos ASGI-Pipeline kompatibel ist.
2
def __init__(self, get_response: Callable[[HttpRequest], Awaitable[HttpResponse]]):
Speichert das nachgelagerte asynchrone Response-Handler-Ausführungsobjekt.
3
async def __call__(self, request: HttpRequest) -> HttpResponse:
Definiert die asynchrone Aufrufschnittstelle zur Verarbeitung eingehender HTTP-Requests.
4
request.correlation_id = request.headers.get("X-Correlation-ID", "anon")
Extrahiert den Korrelations-Header oder weist dem Request einen Standardwert zu.
5
response = await self.get_response(request)
Wartet asynchron auf die nachgelagerte Request-Verarbeitung zur Erzeugung der Response.