question:django中间件有哪些?
answer:
django中可以自定义中间件类,继承django.utils.deprecation.MiddlewareMixin类,然后通过重写里面的五个方法,实现请求从进入django到最后返回response给浏览器过程中的一层层的拦截。
先说说最主要的三个方法,首先是process_request方法,在请求进入主路由之前被调用,返回None表示继续进入下一事件,返回HttpResponse对象表示此次请求结束,直接返回响应结果。然后是process_view方法,在执行视图函数之前被调用,返回None表示继续进入下一事件,返回HttpResponse对象表示此次请求结束,直接返回响应结果。最后是process_response方法,在所有响应结果返回给浏览器之前被调用,包括之前被其余中间件拦下的结果,最后返回HttpResponse对象,表示最终返回给浏览器的结果。
还有两个方法是process_exception和process_template_response,分别在报出异常和模板刚好执行完毕后被调用,不过相比之前三个方法,这两个方法基本不常用到。
在settings里注册自定义中间件时,写在前面的中间件在处理请求时会先被执行,但在最后返回response时会先执行写在后面的中间件。