27Django用中间件实限制某个ip地址只能向 /test开头的地址发送5次请求
题目:
提示:
request.META['REMOTE_ADDR']可以得到远程客户端的ip地址
request.path_info可以得到客户端访问的请求路由信息
分析:
本例需求适合使用下面的这个中间件方法:
process_request(self, request)
执行路由之前被调用,在每个请求上调用,返回None或HttpResponse对象,适用于ip地址的过滤
开工:
1在项目目录下创建一个python包:middleware,并在python包middleware中创建一个python文件mymiddleware.py(
mysite7 middleware __init__.py mymiddleware.py mysite7 __init__.py asgi.py settings.py urls.py views.py wsgi.py manage.py
2在mymiddleware.py内编写中间件:
#用中间件实限制某个ip地址只能向 /test开头的地址发送5次请求 class VisitLimit(MiddlewareMixin): visit_times = {} def process_request(self,request): #获取访问者的ip ip_address = request.META['REMOTE_ADDR'] #获取访问者的路由 path_url = request.path_info #如果不是/test开头的路由就直接retuen None,往下继续进行 if not re.match('^/test',path_url): return #从字典里获取ip地址,如果字典为空就给这个ip的value值设置一个0 times = self.visit_times.get(ip_address,0) print('ip',ip_address,'已经访问',times) #每访问一次就让visit_times[ip_address]的值加1 self.visit_times[ip_address] = times + 1 #如果值小于五就放行 if times < 5: return return HttpResponse('您访问了' + str(times) + '次,访问被禁止')
3注册中间件
MIDDLEWARE = [ 'middleware.mymiddleware.VisitLimit', ]
4访问浏览器http://127.0.0.1:8000/test_cache
您访问了13次,访问被禁止

浙公网安备 33010602011771号