目录

1 背景2 概念3 访问ip限制中间件(案例)4 中间件模板

1 背景

就是在我们的项目里面,多加一段代码,可插拔式的, 一般是配置在setting.py里面,django有很多默认的中间件

2 概念

中间件就是对全局的路由进行拦截,就可以理解

3 访问ip限制中间件(案例)

class IpMiddleware(MiddlewareMixin):

visit_times = {}

def process_request(self, request):

# 执行路由之前被调用,返回None就是通过,返回HttpResponse 就是拦截成功

print("执行路由之前被调用")

# 获取远程客户端的ip地址

IPAddr = request.META['REMOTE_ADDR']

# 获取请求的路由的地址

pathinfo = request.path_info

print(IPAddr) # 127.0.0.1

print(pathinfo) # /test/

if not re.match('^/test',pathinfo):

# 如果没有匹配到

return

# 拿到现在的访问次数

times = self.visit_times.get(IPAddr,0)

self.visit_times[IPAddr] = times+1

if times<5:

return

return HttpResponse("您已经访问了"+str(times)+"次,访问被禁止")

4 中间件模板

import re

from django.http import HttpResponse

from django.utils.deprecation import MiddlewareMixin

# 中间件就是一个类,继承父类MiddlewareMixin,重写最多的5个方法

# 就是你可以重写一个或者多个方法

class IpMiddleware(MiddlewareMixin):

visit_times = {}

def process_request(self, request):

# 执行路由之前被调用,返回None就是通过,返回HttpResponse 就是拦截成功

print("执行路由之前被调用")

# 获取远程客户端的ip地址

IPAddr = request.META['REMOTE_ADDR']

# 获取请求的路由的地址

pathinfo = request.path_info

print(IPAddr) # 127.0.0.1

print(pathinfo) # /test/

# if not re.match('^/88888',pathinfo):

# # 如果没有匹配到

# return

# # 拿到现在的访问次数

# times = self.visit_times.get(IPAddr,0)

#

# self.visit_times[IPAddr] = times+1

#

# if times<5:

# return

# return HttpResponse("您已经访问了"+str(times)+"次,访问被禁止")

def process_view(self, request, view_func, view_func_args, view_func_kwargs):

# 调用视图函数之前被调用,返回None就是通过,返回HttpResponse 就是拦截成功

print("调用视图函数之前被调用")

return None

def process_response(self, request, response):

# 所有的响应返回给浏览器之前被调用,返回HttpResponse

# 一定会走这个逻辑,即使view里面代码错了,先走错的,再走这个

# 执行路由之前被调用

# 调用视图函数之前被调用

# 我出错了

# 返回给浏览器之前,调用我了

print("返回给浏览器之前,调用我了")

return response

#

# def process_template_response(self, request, response):

# # 很少用

# # 只有我们的视图里面返回了render渲染的,才会走这个

# print("我走了render函数了")

# return None

def process_exception(self, request, exception):

# 视图里面出错了,就会自动到这个里面执行,返回HttpResponse

# 抓异常,发邮件

print("我出错了")

return None

写完之后,在setting里面进行注册

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: