2012-04-04 33 views

回答

14

上下文處理器用於爲模板提供額外的數據。中間件用於攔截請求/響應對象,並以某種有意義的方式修改它們(或觸發其他行爲)。

1

他們在不同的上下文中工作在不同的堆棧級別。它通常很難將框架堆棧保持爲絕對正統,特別是像Django處理這樣的Web框架是請求和響應。是的,我們可以在呈現模板時使用request.user,而不是context_processor使用context.user。但是您可能不希望僅在模板中使用的屬性在每個請求中都設置。

此外,裝飾器比視圖級操作的中間件靈活,但很難說中間件是裝飾者精簡版。順便說一下,我希望將上下文處理器作爲分配模板標籤對待,但會自動加載。

19

中間件充當Django的低級別請求/響應處理鉤子,它很輕鬆。這些鉤子可用於請求,響應,視圖,template_response和異常處理。掛鉤可能需要在視圖處理它之前修改請求,它可能需要記錄有關請求的信息以進行調試,檢查cookie以設置本地等等。

瞭解更多關於Middleware

上下文處理器只是修改上下文。上下文是將變量傳遞給模板的關鍵值映射。上下文處理器將請求對象作爲參數,並返回合併到上下文中的項目的字典。上下文會根據您的視圖呈現給您的模板,並且它會附加您的上下文處理器合併的任何其他內容。您可以將其視爲全局上下文變量,在您的所有模板中均可使用。

瞭解更多關於Context Processors

兩者都相當簡單的寫和有其目的。下面是示出了其中中間件和上下文適應在典型的django流程的圖:

enter image description here

Django的流程圖

  1. 用戶請求一個頁面

  2. 請求到達請求中間件,它可以操縱或回答請求

  3. URLConffinds rela特德使用網址查看。PY

  4. 查看中間件被調用,它可以操縱或回答請求

  5. 視圖功能是通過模型

  6. 所有模型來調用

  7. 視圖可以選擇性地訪問數據-DB交互是通過管理器完成的

  8. 如果需要,視圖可以使用特殊的上下文

  9. 將上下文傳遞給用於呈現的模板

相關問題