限制ip访问频率
import time
from django.utils.deprecation import MiddlewareMixin
from django.http.response import HttpResponse
from django.core.cache import caches
class IpLimitMiddleware(MiddlewareMixin):
def process_request(self,request):
ip = request.META.get("REMOTE_ADDR")
cache = caches['redis_backend']
requests = cache.get(ip,[])
while requests and time.time() - requests[-1] > 30:
requests.pop()
requests.insert(0, time.time())
cache.set(ip, requests, timeout=30)
print(len(requests))
if len(requests) > 5:
return HttpResponse("请求过于频繁,请稍后重试!")
黑名单
import time
from django.utils.deprecation import MiddlewareMixin
from django.http.response import HttpResponse
from django.core.cache import caches
class IpLimitMiddleware(MiddlewareMixin):
def process_request(self,request):
ip = request.META.get("REMOTE_ADDR")
cache = caches['redis_backend']
black_list = cache.get('black',[])
if ip in black_list:
return HttpResponse("黑名单用户!")
requests = cache.get(ip,[])
while requests and time.time() - requests[-1] > 60:
requests.pop()
requests.insert(0, time.time())
cache.set(ip, requests, timeout=60)
if len(requests) > 30:
black_list.append(ip)
cache.set('black',black_list,timeout=60*2)
print(len(requests))
if len(requests) > 5:
return HttpResponse("请求过于频繁,请稍后重试!")