时间:2021-07-01 10:21:17 帮助过:35人阅读
2 django一个请求的完整生命周期
- django一个请求的生命周期 简单来说就是: wsgi 和django 客户端-->request--->wsgi--->所有中间件(middleware的process_request)--->process_view---->views views--->urls--->所有中间件(middleware的process_response)--->wsgi--->客户端 ps: 在中间件的process_request已经知道要执行哪个视图函数了(根据request已经获取url,根据url获取对应视图函数)View Code
3 中间件
# 中间件 - django一个请求的生命周期 简单来说就是: wsgi 和django 客户端-->request--->wsgi--->所有中间件(middleware的process_request)--->process_view---->views views--->urls--->所有中间件(middleware的process_response)--->wsgi--->客户端 ps: 在中间件的process_request已经知道要执行哪个视图函数了(根据request已经获取url,根据url获取对应视图函数) - 自己定义中间件Class MyMiddle(中间件是一个类) from django.utils.deprecation import MiddlewareMixin from django.shortcuts import render,HttpResponse class MyMiddle1(MiddlewareMixin): def process_request(self, request): print(‘m1.process.request‘) def process_view(self, request,callback, callback_args, callback_kwargs): print(‘m1.process_view‘) print(callback) # 这个callback,就是url对应的视图函数 # return callback(request, *callback_args, **callback_kwargs) def process_response(self, request, response): print(‘m1.processs.response‘) return response # 一定要有这个,不然会报错 def process_exception(self, request, exception): print(‘m1.process_exception‘) # print(exception) class MyMiddle2(MiddlewareMixin): def process_request(self, request): print(‘m2.process.request‘) def process_view(self,request, callback, callback_args, callback_kwargs): print(‘m2.process_view‘) def process_response(self, request, response): print(‘m2.processs.response‘) return response # 一定要有这个,不然会报错 def process_exception(self, request, exception): print(‘m2.process_exception‘) # print(exception) - 注册中间件 MIDDLEWARE = [ #省略前面部分,追加后面两个 ‘mid.MyMiddle1‘, ‘mid.MyMiddle2‘, ] - 一个request的完整生命周期 https://www.processon.com/diagraming/5a0ce2bae4b06bed41d126e1 正常的流程: m1.process.request m2.process.request m1.process_view m2.process_view views m2.processs.response m1.processs.response 如果有exception: m1.process.request m2.process.request m1.process_view m2.process_view views m2.process_exception m1.process_exception m2.processs.response m1.processs.response - 中间件应用 对所有请求(或一部分请求)做统一操作(比如缓存)--可以用中间件实现 对每个请求做判断,如果缓存有,就返回,否则就到views读数据库,View Code
[oldboy-django][2 深入django] django一个请求的生命周期 + WSGI + 中间件
标签:简单 容器 python isp print span 实现 wsgi ace