python / intermediate
Snippet
Django Eigene Middleware für Request/Response Verarbeitung
Middleware in Django fungiert als Brücke zwischen dem Webserver und Ihrer Anwendung. Jede Middleware-Klasse umschließt die View und kann Requests abfangen, bevor sie die View erreichen, und Responses, bevor sie zum Client zurückkehren. Eigene Middleware ist leistungsstark für übergreifende Anliegen wie Logging, Rate-Limiting, Authentifizierungsprüfungen und Request-Modifikation.
snippet.py
1
from django.http import JsonResponse\n\nclass RequestLoggingMiddleware:\n def __init__(self, get_response):\n self.get_response = get_response\n\n def __call__(self, request):\n print(f"Request path: {request.path}")\n response = self.get_response(request)\n print(f"Response status: {response.status_code}")\n return response\n\nclass ApiRateLimitMiddleware:\n def __init__(self, get_response):\n self.get_response = get_response\n\n def __call__(self, request):\n if request.path.startswith('/api/'):\n client_ip = request.META.get('REMOTE_ADDR')\n if not self._check_rate_limit(client_ip):\n return JsonResponse({'error': 'Rate limit exceeded'}, status=429)\n return self.get_response(request)\n\n def _check_rate_limit(self, ip):\n return True
django
Erklärung
1
class RequestLoggingMiddleware:
Definiere eine eigene Middleware-Klasse
2
def __init__(self, get_response):
Initialisiere mit der nächsten Middleware oder View in der Kette
3
def __call__(self, request):
Verarbeite Request vor View und Response nach View
4
if request.path.startswith('/api/'):
Filtere Requests nach Pfadmuster
5
return JsonResponse({'error': 'Rate limit exceeded'}, status=429)
Frühzeitige Rückgabe mit Fehler-Response bei Rate-Limit-Überschreitung