在我看來,中間件可以完成上下文處理器所能做的一切。那麼上下文處理器的重點是什麼?他們只是中間件 - 精簡版?上下文處理器vs django中的中間件
回答
上下文處理器用於爲模板提供額外的數據。中間件用於攔截請求/響應對象,並以某種有意義的方式修改它們(或觸發其他行爲)。
他們在不同的上下文中工作在不同的堆棧級別。它通常很難將框架堆棧保持爲絕對正統,特別是像Django處理這樣的Web框架是請求和響應。是的,我們可以在呈現模板時使用request.user,而不是context_processor使用context.user。但是您可能不希望僅在模板中使用的屬性在每個請求中都設置。
此外,裝飾器比視圖級操作的中間件靈活,但很難說中間件是裝飾者精簡版。順便說一下,我希望將上下文處理器作爲分配模板標籤對待,但會自動加載。
中間件充當Django的低級別請求/響應處理鉤子,它很輕鬆。這些鉤子可用於請求,響應,視圖,template_response和異常處理。掛鉤可能需要在視圖處理它之前修改請求,它可能需要記錄有關請求的信息以進行調試,檢查cookie以設置本地等等。
瞭解更多關於Middleware。
上下文處理器只是修改上下文。上下文是將變量傳遞給模板的關鍵值映射。上下文處理器將請求對象作爲參數,並返回合併到上下文中的項目的字典。上下文會根據您的視圖呈現給您的模板,並且它會附加您的上下文處理器合併的任何其他內容。您可以將其視爲全局上下文變量,在您的所有模板中均可使用。
瞭解更多關於Context Processors。
兩者都相當簡單的寫和有其目的。下面是示出了其中中間件和上下文適應在典型的django流程的圖:
Django的流程圖
用戶請求一個頁面
請求到達請求中間件,它可以操縱或回答請求
URLConffinds rela特德使用網址查看。PY
查看中間件被調用,它可以操縱或回答請求
視圖功能是通過模型
所有模型來調用
視圖可以選擇性地訪問數據-DB交互是通過管理器完成的
如果需要,視圖可以使用特殊的上下文
將上下文傳遞給用於呈現的模板
- 1. Django的上下文處理器和中間件
- 2. Django上下文處理器
- 3. Django站點的上下文處理器
- 4. Django上下文處理器故障
- 5. Django上下文處理器獲取AnonymousUser
- 6. Django,模板上下文處理器
- 7. 在Grails中是否有Django的上下文處理器?
- 8. Django中的線程安全模板上下文處理器?
- 9. Django 1.5中的模板上下文處理器在哪裏?
- 10. 在上下文處理器中的關係「向後」處理器
- 11. 在Django中上傳/處理文件
- 12. Django與變量域相關的中間件上下文處理問題
- 13. 在Django中處理文件
- 14. Django上下文處理器沒有Django的其餘部分?
- 15. Django:在文件上傳中處理瀏覽器的BACK按鈕
- 16. __init__ vs __enter__在上下文管理器
- 17. 使用Django上下文處理器或中間件來檢查模板上的Cookie?
- 18. 將值從裝飾器傳遞到django中的上下文處理器
- 19. jQuery的事件處理程序關閉VS上下文
- 20. django admin上傳的文件處理
- 21. 使用Django處理上傳的文件
- 22. Django:處理上傳的SQLite文件
- 23. Django的時候查詢集傳遞到上下文處理器
- 24. 沒有模板上下文處理器的Django admin
- 25. Django的上下文處理器在模板
- 26. Django的上下文處理器以檢查用戶權限
- 27. Turbogears2:Django上下文處理器的模擬
- 28. Bazel:處理ctx.action中的中間文件
- 29. 處理上下文管理器中的異常
- 30. django異常處理程序中間件和處理程序500