您的位置:首頁>正文

Django是框架中的老大哥!你知道它的工作流程是怎麼樣的嗎?

process_exception();

process_template_response();

process_response()

核心在於middleware(中介軟體),Django所有的請求/返回都由中介軟體來完成。中介軟體,就是處理HTTP的request和reponse的,類似外掛程式,比如有request中介軟體、View中介軟體、response中介軟體、exception中介軟體等,Middleware都需要在"project/settings.py"中MIDDLEWARE_CLASS的定義。大致的程式流程圖如下所示:

Request預處理函數:process_request(self, request)這個方法的調用時機在Django接收到request之後,但仍未解析URL以確定應當運行的view之前。Django向它傳入相應的HttpRequest物件,以便在方法中修改。process_request()應當返回None或HttpResponse物件。如果返回None,Django將繼續處理這個request,執行後續的中介軟體,然後調用相應的view。如果返回HttpResponse物件,Django將不再執行任何其它的中介軟體(無視其種類)以及相應的view。Django將立即返回該HttpResponse。。

創建Response

BaseHandler的get_response方法就是根據request創建response,而具體生成response的動作就是執行urls.py中對應的view函數了,這也是Django可以處理“友好URL”的關鍵步驟,每個這樣的函數都要返回一個Response實例。此時一般的做法是通過loader載入template並生成頁面內容,其中重要的就是通過ORM技術從資料庫中取出資料,並渲染到template中,從而生成具體的頁面了。

處理Response

Django返回Response給flup,flup就取出Response的內容返回給Web伺服器,由後者返回給流覽器。

總之,Django在fastcgit中主要做了兩件事:處理Request和創建Response,而它們對應的核心就是"urls分析",“範本技術”和“ORM技術”。

首先它嘗試一個字典的方式的查找,看看foo['bar']是否存在。如果存在,則它的值被輸出,這個過程也隨之結束。

如果字典查找失敗,範本系統嘗試屬性查找,看看foo.bar是否存在。同時它還檢查這個屬性是否可以被調用,如果可以,調用之。

如果屬性查找失敗,範本系統嘗試把它作為清單索引進行查找。

如果所有這些都失敗了,範本系統輸出配置TEMPLATE_STRING_IF_INVALID的值,預設是空字串。

範本過濾就是簡單的Python functions, 它接受一個值和一個參數,返回一個新的值。比如,date過濾用一個Python datetime物件作為它的值,一個標準的strftime格式化字串作為它的參數,返回對datetime物件應用了格式化字串之後的結果。

構造HttpResponse

HttpResponse類存在於django.http.HttpResponse,以字串的形式傳遞給頁面。一般地,你可以通過給HttpResponse的構造函數傳遞字串表示的頁面內容來構造HttpResponse物件:

當然,你也可以自己定義不包含在上表中的HttpResponse子類。

著作權歸作者所有,如有侵權請聯繫小編刪除!

核心在於middleware(中介軟體),Django所有的請求/返回都由中介軟體來完成。中介軟體,就是處理HTTP的request和reponse的,類似外掛程式,比如有request中介軟體、View中介軟體、response中介軟體、exception中介軟體等,Middleware都需要在"project/settings.py"中MIDDLEWARE_CLASS的定義。大致的程式流程圖如下所示:

Request預處理函數:process_request(self, request)這個方法的調用時機在Django接收到request之後,但仍未解析URL以確定應當運行的view之前。Django向它傳入相應的HttpRequest物件,以便在方法中修改。process_request()應當返回None或HttpResponse物件。如果返回None,Django將繼續處理這個request,執行後續的中介軟體,然後調用相應的view。如果返回HttpResponse物件,Django將不再執行任何其它的中介軟體(無視其種類)以及相應的view。Django將立即返回該HttpResponse。。

創建Response

BaseHandler的get_response方法就是根據request創建response,而具體生成response的動作就是執行urls.py中對應的view函數了,這也是Django可以處理“友好URL”的關鍵步驟,每個這樣的函數都要返回一個Response實例。此時一般的做法是通過loader載入template並生成頁面內容,其中重要的就是通過ORM技術從資料庫中取出資料,並渲染到template中,從而生成具體的頁面了。

處理Response

Django返回Response給flup,flup就取出Response的內容返回給Web伺服器,由後者返回給流覽器。

總之,Django在fastcgit中主要做了兩件事:處理Request和創建Response,而它們對應的核心就是"urls分析",“範本技術”和“ORM技術”。

首先它嘗試一個字典的方式的查找,看看foo['bar']是否存在。如果存在,則它的值被輸出,這個過程也隨之結束。

如果字典查找失敗,範本系統嘗試屬性查找,看看foo.bar是否存在。同時它還檢查這個屬性是否可以被調用,如果可以,調用之。

如果屬性查找失敗,範本系統嘗試把它作為清單索引進行查找。

如果所有這些都失敗了,範本系統輸出配置TEMPLATE_STRING_IF_INVALID的值,預設是空字串。

範本過濾就是簡單的Python functions, 它接受一個值和一個參數,返回一個新的值。比如,date過濾用一個Python datetime物件作為它的值,一個標準的strftime格式化字串作為它的參數,返回對datetime物件應用了格式化字串之後的結果。

構造HttpResponse

HttpResponse類存在於django.http.HttpResponse,以字串的形式傳遞給頁面。一般地,你可以通過給HttpResponse的構造函數傳遞字串表示的頁面內容來構造HttpResponse物件:

當然,你也可以自己定義不包含在上表中的HttpResponse子類。

著作權歸作者所有,如有侵權請聯繫小編刪除!

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示