21.-中间件
一、中间件的定义
1.中间件是Django请求/响应处理的钩子框架,它是一个轻量级的、低级的“插件”系统,用于全局改变Django的输入或输出
2.中间件以类的形式体现
3.每个中间件组件负责做一些特定的功能,例如Django包含一个中间件组件 AuthenticationMiddleware,它使用会话将用户与请求关联起来
二、中间件编写&注册
注册中间件
# 在项目路径下创建middleware(自定义名称)中间件文件夹 # settings.py 中需要注册一下自定义的中间件 MIDDLEWARE = [ 'middleware.py_name.calss_name', #中间件文件夹/py文件/中间件类 ] # 配置为数组,中间件被调用时先以先上到下,再由下到上的顺序调用 / 进视图之前是从上到下,进视图之后是从下到上
编写中间件
1 2 3 4 | # 中间件类必须继承自 from django.utils.deprecation import MiddlewareMixin class Middleware_Name(MiddlewareMixin): ... |
# 中间件类必须实现下列五个方法中的一个或多个 def process_request(self,request) #执行路由之前被调用,在每个请求上调用,返回None或者HttpResponse对象 def process_view(self,request,callback,acllback_args,acllback_kwargs) #调用视图之前被调用,在每个请求上调用,返回None或者HttpResponse对象 def process_view(self,request,response) # 所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象 def process_exception(self,request,exception) # 当处理过程中抛出异常时调用,返回一个HttpResponse对象 def process_template_response(self,request,response) #在视图函数执行完毕且视图返回的对象中包含render方法时被调用,该方法需要返回实现了render方法的响应对象 # 中间件中的大多数方法在返回None时表示忽略当前操作进入下一事项,当返回HttpResponse对象时表示此请求结束,直接返回给客户端
实现示例
用中间件实现强制某个IP地址只能向/test开头的地址发送5次请求
request.META['REMOTE_ADDR'] #可以得到远程客户端的地址 request.path_info #可以得到客户的访问的路由信息
# 中间件类 class VisitLimit(MiddlewareMixin): # 定义字典记录访问次数 visit_times = {} def process_request(self, request): # 获取访问者IP地址 ip_address = request.META['REMOTE_ADDR'] # 获取访问路由 path_url = request.path_info # 如果是以/test地址开头,返回None,继续执行 if not re.match('^/test', path_url): return # 存储ip地址访问次数 times = self.visit_times.get(ip_address, 0) print('ip', ip_address, '已经访问', times) # 访问次数+1 self.visit_times[ip_address] = times + 1 # 判断访问次数 if times < 5: return return HttpResponse('已经访问过' + str(times) + '次,访问被禁止')
三、Django请求流程图
风月都好看,人间也浪漫.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)