淺談Django的中間件與Python的裝飾器

淺談Django的中間件 與Python的裝飾器

1、原理

1.裝飾器是Python的一種語法應用,利用閉包的原理去更改一個函數的功能,即讓一個函數執行以前先到另一個函數中執行其餘需求語句,在執行該函數。在開發項目中,一般使用裝飾器來管理權限,登陸等等,配上Python的 @ 語法糖,輕鬆實現代碼的重用性和低耦合性。

2.而Django中的中間件是利用面向切面的編程思想,對Django服務器訪問過程當中間進行干預。

  • 是一個輕量級、底層的插件系統,能夠介入Django的請求和響應處理過程,修改Django的輸入或輸出編程

  • 激活:添加到Django配置文件中的MIDD瀏覽器

  • LEWARE_CLASSES元組中 每一箇中間件組件是一個獨立的Python類,能夠定義下面方法中的一個或多個服務器

  • _init _:無需任何參數,服務器響應第一個請求的時候調用一次,用於肯定是否啓用當前中間件閉包

  • process_request(request):執行視圖以前被調用,在每一個請求上調用,返回None或HttpResponse對象框架

  • process_view(request, view_func, view_args, view_kwargs):調用視圖以前被調用,在每一個請求上調用,返回None或HttpResponse對象函數

  • process_template_response(request, response):在視圖恰好執行完畢以後被調用,在每一個請求上調用,返回實現了render方法的響應對象spa

  • process_response(request, response):全部響應返回瀏覽器以前被調用,在每一個請求上調用,返回HttpResponse對象插件

  • process_exception(request,response,exception):當視圖拋出異常時調用,在每一個請求上調用,返回一個HttpResponse對象使用中間件,能夠干擾整個處理過程,每次請求中都會執行中間件的這個方法中間件

2、聯繫及區別

  • 聯繫:中間件是利用裝飾器原理實現的,具體經過兩個函數嵌套、或經過改寫類中的__ call __方法實現一個裝飾器功能。使之過來的Request的請求,先到call方法中進行處理。配置中間件,實現過程干預。
  • 區別:一個是Python的語法功能,一個是Django 框架自帶的輕量級插件系統。
相關文章
相關標籤/搜索