Django 中间件

securityMiddleware 请求/响应 循环提供安全改进

sessionMiddleware  会话支持

commonMiddleware 重写url

csrfViewMiddleware 添加跨站点请求伪造的保护  

authenticationMiddleware 向每个接收到的user对象添加httprequest属性,表示当前登录的用户

messageMiddleware 基于Cookie和会话的消息支持

XFrameOptionsMiddleware 对点击劫持的保护

中间件的顺序

middleware的顺序很重要,中间件可以依赖于其他中间件,在请求阶段,调用视图之前,以middleware 自上而下 定义的顺序应用中间件,在处理响应期间,中间件的执行顺序是倒序执行的。

基于类的中间件特殊方法

process_request(self,request)

在请求传达到路由系统之前处理从服务器wsgi 传来的请求。它的返回值可以是None也可以是HttpResponse对象。返回值是None的话,按正常流程继续走,交给下一个中间件处理或路由系统处理;如果是HttpResponse对象,Django将不执行视图函数,而该HttpResponse对象会经过本层process_response返回给浏览器

process_view(self, request, view_func, view_args, view_kwargs)

会在Django 调用视图之前被调用;它应该返回一个None 或一个HttpResponse对象。如果返回None,Django 将会继续处理这个请求,执行其它的process_view() 中间件,然后调用对应的视图。 如果它返回一个HttpResponse对象,Django不会调用相应的视图;HttpResponse会经由本层及本层外层的响应中间件返回给浏览器

process_exception(self, request, exception)

当一个视图抛出异常时,Django会调用process_exception()来处理。process_exception()应该返回一个 None 或者一个HttpResponse对象。 如果它返回一个HttpResponse对象,则将应用模板响应和响应中间件,并将生成的响应返回给浏览器。 否则,默认的异常处理开始工作。

process_response(self, request, response)

处理响应:处理本层或本层内层传递来的响应


中间件流程:

Django工作流程

自定义中间件

 

posted @ 2021-04-01 17:50  简直😓  阅读(30)  评论(0编辑  收藏  举报