1. 程式人生 > >django源碼解析一(請求處理流程)

django源碼解析一(請求處理流程)

技術分享 ges order files 源碼 src esp 約束 sgi

技術分享


技術分享 1.我們都知道WSGI是一個規範,規範了server和application之間通信的一些約束,server端在監聽到請求之後,會把請求轉給application去處理,他們之間關聯起來的橋梁是一個env變量和一個start_response的回調函數,env用來初始化application的request請求,start_response方法用來將response返回給server。 2.每一個application都要實現一個__call__方法接收兩個參數(environ, start_response),__call__方法執行server傳過來的每一個請求,獲取response的方法是 self.get_response(request), request是一個WSGIRequest的實例,這個WSGIRequest的實例在生成的時間傳入一個參數 environ,根據environ生成一個request的實例,這個實例會根據environ的信息初始化request的基本信息。如下圖: 技術分享

技術分享 3.get_response方法具體做了哪些事情? 先去循環執行沒一個middleware的process_request方法,如果有返回值,則直接跳出循環,如果沒有返回值,則依次執行url,view, callback, (這些是幹啥的我暫時還沒看),最後如果response有render方法,則執行template_response_middlerware的渲染方法並且執行response的render方法,詳情可見下圖: 技術分享

技術分享 然後執行回調函數start_response(status, response_headers),最後返回response: 技術分享

django源碼解析一(請求處理流程)