中间件
开发django项目是,涉及全局相关功能,都可以使用中间件实现。
1.请求时,需要经过中间件,才能到达真正的django后端。
2.响应走的时候,也要经过中间件,才能出去。
依次经过里面的中间件进出,django自带7个中间件。
必须掌握的:
1. process_request(self,request)a.请求来时,执行每个中间件的requesetb. 执行顺序,配置文件中的注册,由上到下c. 中间件没有request,就跳过,执行下一个中间件d. 如果该方法放回HttpResponse对象,那么请求就不在执行下去,原路返回。process_request方法用于全局相关的条件限制。 2.process_response(self, request, response) return responsea. response 就是django后端返回的内容,需要return response也可以替换自定义的。 b. 响应走的时候经过每个中间件,从下往上。*django如果中间件request返回,就执行同级的response 返回。flask 也有中间件,但会全部执行。需要了解的:
3.process_view(self, request, view_func, view_args, view_kwargs)路由匹配成功后,视图函数前。4.process_template_response(self,request,response)返回HttpRespone 有render属性时候才触发。5.process_exception(self, request, exception)当视图函数报错的时候自动触发
如何定义中间件
1. 在项目名或应用名下,创建一个任意名称的文件夹
2. 在文件夹内,创建一个任意名称的py文件
3.在py文件内容,需要书写类。(这个类必须继承MiddlewareMixin)
然后在里面可以自定义5个方法,用几个写几个
4. 将类的路径以字符串形式注册到配置文件夹中才能生效。
class Mymd1(MiddlewareMixin):def process_request(self,request):print('我是第一个自定义中间件里面的process_request方法')# return HttpResponse("我是第一个中间件返回的Httpresponse对象")def process_response(self,request,response):print('我是第一个中间件里面的process_reponse方法')return response # 就是后端返回给前端浏览器的响应数据def process_view(self,request,view_func,*args,**kwargs):print(view_func,args,kwargs)print('我是第一个中间件里面的process_view')def process_template_response(self,request,response):print('我是第一个中间件里面的process_template_reponse方法')return responsedef process_exception(self,request,exception):print('exception:',exception)print('我是第一个中间件里面的process_exception')
参考:https://www.cnblogs.com/guyouyin123/p/12193772.html