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工作流程
自定义中间件