django 的請求處理部分----WSGIHandler 源碼分析 django1.5.5

從這裏拉開django框架的帷幕。。撕開,哈哈django

主要涉及的類:django.core.handlers.base.BaseHandler,django.core.handlers.wsgi.WSGIHandler,前者爲後者的父類。框架

django.http.request.HttpRequesturl

後者的實例實現了WSGI請求的處理,由於WSGIHandler 實現了__call__方法,因此實例成爲了可調用對象。對象

 流程:接收到一個wsgi請求--》生成一個WSGIHandler實例,傳入參數environ,start_response.--》創建request對象(environ做爲參數)--》調用base.BaseHandler的get_response方法(使用這個request做爲參數)get

這個get_response的主要做用就是各類middleware的調用,其次就是解析url到view,依據url.py中的patterns。io

urlresolve是什麼呢,就是從urlconf中找出第一個匹配到的view。循環

而後就開始middleware和view的調用了。request

get_response首先將request用_requet_middleware處理一遍。請求

若是request_middleware返回response了,就直接結束並返回response方法

request_middleware循環完了固然該view_middleware了。view_middleware在view尚未被執行的時候進行處理。參數是request,view,var參數keyword參數。

接着就該真正的執行這個view了,若是在views中出錯了,就進行exceptiion_middleware處理。不然返回一個response。

若是view的返回值是一個Template,那麼會致使template_response_middleware的調用。參數是request和response

最後被調用的是response_middleware,參數仍然是request,response,不過這個response是Response對象了。。

注意在上面任何一步返回一個response都會致使views中的response失效。

沒什麼難的,源代碼很清晰。。

接下來分析一下這個過程當中涉及到的urlresolve過程。

相關文章
相關標籤/搜索