Django1.8 框架中间件解析
中间件是如何生效的
HTTP请求经过WSGI,到达Django内的application_callable
也就是如下图所示的WSGIHandler
内(对WSGI的application_callable
不熟悉的可参考:Django是如何实现WSGI APP的)。在其中environ会被保存在request中,然后被传递给父类BaseHandler
的get_respinse(request)
方法。
进入到get_response
内,可以看到五个for循环遍历不同种类的中间件方法列表(下图只节出3种),
就是在这里请求经过了所有的中间件处理。
中间件的加载
Django的application_callable
接收到第一个请求时,如果中间件还未加载,则会加线程锁并通过父类BaseHandler
内的load