Python學習---Django拾遺
前台發送URL請求到Django的中間件進行内容校驗,完成校驗後到達路由映射檔案url.py,然後調用視圖函數views.py裡面的函數進行内容處理【 1.操作資料庫進行資料讀寫 2. 調用前台的模版内容】最後傳回字元串給前台進行頁面的渲染【這裡回去的時候也會經過中間件】。
<b> </b>
Django中間件類似于Java架構中的攔截器之類的東西,就是在請求到達我們要操作的函數之前添加的一些判斷之類的操作。
應用場景: 适用于全局的操作,對所有的使用者請求/使用者傳回資料都需要處理的情況。process_request适用于請求到達之前已經執行的操作,類似防護的操作[例如,csrf中間件,過濾器,自定義請求頭];
Django中間件即類中的方法執行順序是Django固定的,不能更改執行順序,函數名稱也不能更改【如果自定義了MiddlewareMixin的話,可以不使用固定的名稱】
注:這裡的函數是不需要全部寫的,也就是process_request和process_response可有可無
中間件中可以定義四個方法,分别是:
process_request(self,request) process_view(self, request, callback, callback_args, callback_kwargs) process_template_response(self,request,response) process_exception(self, request, exception) process_response(self, request, response)
中間件執行個體
建立中間件路徑【檔案夾+檔案】
settings.py
urls.py
views.py
plugin/handler.py
templates/XXX.html
無
頁面顯示;
正常通路執行順序:
中間件request請求中傳回response效果:
另外其他的函數執行效果:
Django為使用者實作防止跨站請求僞造的功能,通過中間件 django.middleware.csrf.CsrfViewMiddleware 來完成。而對于django中設定防跨站請求僞造功能有分為全局和局部。
全局:
中間件 django.middleware.csrf.CsrfViewMiddleware
局部:
@csrf_protect,為目前函數強制設定防跨站請求僞造功能,即便settings中沒有設定全局中間件。
@csrf_exempt,取消目前函數防跨站請求僞造功能,即便settings中設定了全局中間件。
注: from django.views.decorators.csrf import csrf_exempt,csrf_protect
settings.py裡面如果未注釋掉CSRF驗證【即需要CSRF驗證】
我們的get請求可以通過,post請求會被攔截
Django裡面使用form的post請求發送資料的時候,一定是return了一個render對象,且HTML的form表單内使用了{% csrf_token %}進行标記,此時前台的HTML裡面會多出一行csrf的token同時會緩存一份到Cookie裡面。同理,如果我們需要ajax發送post請求的時候,是需要從Cookie裡面擷取token[從截圖可以看到Cookie裡面token的key是csrftoken]并添加到請求頭[request-header]裡讓Django進行驗證的。
Ajax請求CSRF執行個體
templates/login.html
PS: 擷取request裡面的請求資訊,可以使用斷點列印,我們可以看出我們request裡的header經過Django處理後在Meta裡面呢,且字段名前添加了HTTP的字首。
其他
由于Django是動态網站,所有每次請求均會去資料進行相應的操作,當程式通路量大時,耗時必然會更加明顯,最簡單解決方式是使用:緩存,緩存将一個某個views的傳回值儲存至記憶體或者memcache中,5分鐘内再有人來通路時,則不再去執行view中的操作,而是直接從記憶體或者Redis中之前緩存的内容拿到,并傳回。
緩存适用于固定内容且通路量大,大型檔案内容,不具有實時性的内容。
Django中提供了6種緩存方式:
開發調試 --> 什麼都不幹 記憶體 檔案 資料庫 Memcache緩存(python-memcached子產品) -->在另外一台伺服器上 Memcache緩存(pylibmc子產品)
配置:
開發調試
記憶體:
檔案:
資料庫:
Memcache緩存(python-memcached子產品)
Memcache可以了解為另外一個伺服器的記憶體,是記憶體級别的緩存;
内容以Key-Value形式存儲,整體的Memcache就是一個大字典
注:memache中如果有伺服器故障,因為memacahe裡面沒有檢測機制,隻能自己監控該子產品,更改子產品裡面的接口方法處理
Django中提供了3種緩存方式:
全棧使用緩存 單獨視圖緩存 局部視圖使用
A. 全棧使用的配置
B.單獨視圖緩存
C.局部視圖緩存
Html檔案内寫
單獨視圖和局部視圖執行個體
templates/part.html
檔案緩存之單獨視圖緩存 :
檔案緩存之局部視圖緩存 :
全棧使用執行個體
其餘同部分的單獨的使用...
全棧中間件代碼分析:
from django.middleware.cache import FetchFromCacheMiddleware
from django.middleware.cache import UpdateCacheMiddleware
bootStrap 一個內建css,js的檔案