python / intermediate
Snippet
Benutzerdefinierte Rate-Limiting-Middleware mit dem Django-Cache-System
Django-Middleware fängt eingehende HTTP-Anfragen vor der View-Ausführung ab. Durch Nutzung der Low-Level-Cache-API von Django in der __call__-Methode einer Middleware können IP-Anfragefrequenzen dynamisch überwacht und gedrosselt werden, um die Endpunktsicherheit zu erhöhen.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from django.core.cache import cachefrom django.http import HttpResponseTooManyRequestsclass SimpleRateLimitMiddleware:def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):client_ip = request.META.get('REMOTE_ADDR', '127.0.0.1')cache_key = f"rl_count:{client_ip}"request_count = cache.get(cache_key, 0)if request_count >= 100:return HttpResponseTooManyRequests("Rate limit exceeded. Try again in 60 seconds.")cache.set(cache_key, request_count + 1, timeout=60)return self.get_response(request)
django
Erklärung
1
def __init__(self, get_response):
Initialisiert die Middleware-Instanz einmalig beim Serverstart und nimmt den nächsten Handler entgegen.
2
client_ip = request.META.get('REMOTE_ADDR', '127.0.0.1')
Extrahiert die Client-IP-Adresse aus den Request-Headern, um einen eindeutigen Cache-Schlüssel zu erstellen.
3
if request_count >= 100:
Prüft, ob der Schwellenwert für maximal zulässige Anfragen im Zeitfenster überschritten wurde.
4
cache.set(cache_key, request_count + 1, timeout=60)
Erhöht den Zähler im Cache-Speicher mit einer Ablaufzeit von 60 Sekunden.