django 處理乙個 request 的過程是首先通過中介軟體,然後再通過預設的 url 方式進行的。我們可以在 middleware 這個地方把所有request 攔截住,用我們自己的方式完成處理以後直接返回 response。因此了解中介軟體的構成是非常必要的。
initializer: __init__(self)
出於效能的考慮,每個已啟用的中介軟體在每個伺服器程序中只初始化一次。也就是說 __init__() 僅在服務程序啟動的時候呼叫,而在針對單個 request 處理時並不執行。
對乙個 middleware 而言,定義 __init__() 方法的通常原因是檢查自身的必要性。如果 __init__() 丟擲異常 django.core.exceptions.middlewarenotused ,則 django 將從 middleware 棧中移出該 middleware。
在中介軟體中定義 __init__() 方法時,除了標準的 self 引數之外,不應定義任何其它引數。
request預處理函式: process_request(self, request)
這個方法的呼叫時機在 django 接收到 request 之後,但仍未解析url以確定應當執行的 view 之前。django 向它傳入相應的 httprequest 物件,以便在方法中修改。
process_request() 應當返回 none 或 httpresponse 物件。
如果返回 none ,django 將繼續處理這個 request,執行後續的中介軟體, 然後呼叫相應的 view。
如果返回 httpresponse 物件,django 將不再執行任何其它的中介軟體(無視其種類)以及相應的view。 django將立即返回該 httpresponse。
view預處理函式: process_view(self, request, callback, callback_args, callback_kwargs)
這個方法的呼叫時機在 django 執行完 request 預處理函式並確定待執行的 view 之後,但在 view 函式實際執行之前。
如同 process_request() , process_view() 應當返回 none 或 httpresponse 物件。如果返回 none , django將繼續處理這個 request ,執行後續的中介軟體, 然後呼叫相應的view。
如果返回 httpresponse 物件,django 將不再執行 任何 其它的中介軟體(不論種類)以及相應的view,django將立即返回。
response後處理函式: process_response(self, request, response)
這個方法的呼叫時機在 django 執行 view 函式並生成 response 之後。
該處理器能修改 response 的內容;乙個常見的用途是內容壓縮,如 gzip 所請求的 html 頁面。
這個方法的引數相當直觀: request 是 request 物件,而 response 則是從 view 中返回的 response 物件。
process_response() 必須返回 httpresponse 物件. 這個 response 物件可以是傳入函式的那乙個原始物件(通常已被修改),也可以是全新生成的。
exception後處理函式: process_exception(self, request, exception)
這個方法只有在 request 處理過程中出了問題並且 view 函式丟擲了乙個未捕獲的異常時才會被呼叫。這個鉤子可以用來傳送錯誤通知,將現場相關資訊輸出到日誌檔案,或者甚至嘗試從錯誤中自動恢復。
這個函式的引數除了一貫的 request 物件之外,還包括view函式丟擲的實際的異常物件 exception 。
process_exception() 應當返回 none 或 httpresponse 物件。
如果返回 none , django將用框架內建的異常處理機制繼續處理相應request。
如果返回 httpresponse 物件,django 將使用該response物件,而短路框架內建的異常處理機制。
XAML的幾個關鍵概念
property elements 使用單獨的xml節點來表示wpf物件的屬性值,這樣就可以表示比較複雜的物件。比如使用property elements就可以這樣表示 yellow 對簡單物件似乎更複雜了,但是如果要表示更複雜一點的物件,比如 這時候,如果沒有property elements就很...
Nginx 幾個策略 的幾個關鍵字
down 表示單前的server暫時不參與負載.weight 預設為1.weight越大,負載的權重就越大。max fails 允許請求失敗的次數預設為1.當超過最大次數時,返回proxy next upstream 模組定義的錯誤.fail timeout max fails次失敗後,暫停的時間。...
類的幾個關鍵字
1 成員變數和區域性變數的區別 1 區域性變數 在方法中或者方法上 區域性變數在棧記憶體中 區域性變數隨著方法的結束而消失 區域性變數在使用前必須有值。2 成員變數 在類中方法外 在堆記憶體中 隨著物件的生成而出現,隨著物件的消失而消失 在初始化時可以不賦值。2 匿名物件 1 匿名物件一般只用一次,...