1. 程式人生 > >django 的請求處理部分----WSGIHandler 原始碼分析 django1.5.5

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

轉自:Django的請求處理部分
從這裡拉開django框架的帷幕

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

django.http.request.HttpRequest

後者的例項實現了WSGI請求的處理,因為WSGIHandler 實現了__call__方法,所以例項成為了可呼叫物件。

流程:接收到一個wsgi請求–》生成一個WSGIHandler例項,傳入引數environ,start_response.–》建立request物件(environ作為引數)–》呼叫base.BaseHandler的get_response方法(使用這個request作為引數)

這個get_response的主要作用就是各種middleware的呼叫,其次就是解析url到view,依據url.py中的patterns。

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

然後就開始middleware和view的呼叫了。

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過程。