[Django]Middleware介紹
Django筆記20201029更新
什麼是Middleware?
Middleware is a framework of hooks into Django’s request/response processing. It’s a light, low-level “plugin” system for globally altering Django’s input or output.
中間件介於request與response中間,可以全局的改變Django的Input及Output。我們能它視為一個插件或是類似裝飾器的概念,在中間過程做處理一些事情。運作原理如下圖:
每個request都是先通過middleware的process_request函式,返回None或HttpResponse。若返回None則繼續往下處理其他middleware,若返回HttpResponse則中止並回到網頁上。
而middleware在settings.py ,request期間順序是從上往下進行處理,response期間是由下往上進行處理。
在request期間調用:
process_request(request)
process_view(request,view_func,view_args,view_kwargs)
在response期間調用:
process_exception(request,exception)(view raise exception)
process_template_response(request,respinse)(僅用於template res)process_response(request,respinse)
在官方範例中加上logging:
在settings.py中設定middleware的位置及類別。
ex: app.middleware.SimpleMiddleware
執行後進到頁面中即可看到印出來的順序如下:
ex: url → 127.0.0.1:8000/middle_test/my_test/
結論:
middleware在中間先做點一些事情,可以節省django的資源、也可以做安全性認證或者配合如cache方法等優化。
若想修改request,例如被傳送到view中的HttpRequest。或者你想修改view返回的Httpresponse,或者想在view執行之前做一些操作,這些都可以通過middleware實現。
ex:網站流量統計 →若只要一個頁面的話寫在View即可,但是要整個網站的流量統計,就可以寫在middleware透過process_request去完成,每次對網站的request在這統計即可。