python / intermediate
Snippet
Vorzeitiger Abbruch der Pipeline-Ausführung in benutzerdefinierter Django Middleware
Django-Middleware steuert den Verarbeitungsablauf von Anfragen. Durch die direkte Rückgabe einer Antwort aus __call__ vor dem Aufruf von get_response bricht die Middleware die Pipeline ab und verhindert die Ausführung nachgelagerter Views.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from django.http import JsonResponseclass IpFilterMiddleware:def __init__(self, get_response):self.get_response = get_responseself.blocked_ips = {"192.168.1.100"}def __call__(self, request):client_ip = request.META.get('REMOTE_ADDR')if client_ip in self.blocked_ips:return JsonResponse({"error": "Access Denied"}, status=403)response = self.get_response(request)return response
django
Erklärung
1
def __init__(self, get_response):
Empfängt und speichert den nächsten Request-Handler in der Middleware-Kette.
2
client_ip = request.META.get('REMOTE_ADDR')
Extrahiert die eingehende IP-Adresse aus den HTTP-Metadaten der Anfrage.
3
if client_ip in self.blocked_ips:
Wertet die bedingte Ablaufsteuerung aus, um blockierte IP-Adressen zu erkennen.
4
return JsonResponse({"error": "Access Denied"}, status=403)
Gibt eine sofortige Antwort zurück, um die Verarbeitung vor dem View-Aufruf zu stoppen.