Django中間件,CSRF(跨站請求僞造),緩存,信號,BootStrap(模板)-響應式(柵格)+模板

Django中間件,CSRF(跨站請求僞造),緩存,信號,BootStrap(模板)-響應式(柵格)+模板

1.中間件(重要):

在Django的setting中有個MIDDLEWARE列表,裏面的東西能夠理解爲過濾管道,裏面有個安全過濾管道: from django.middleware.csrf import CsrfViewMiddleware裏面有四個經常使用的方法:javascript

  • process_request:客戶端請求的通道,但當此方法裏面有return時就不會再執行後面的方法,直接走process_response方法(表示請求數據被攔截)。注:其中使用return 會攔截掉客戶端的全部請求。
  • process_views:通過process_request以後再重新從每一個管道的此方法執行後面的方法(後面的方法指的是主體URL請求時所走的views方法)。
  • process_exception:拋出異常,在process_response方法執行以前,且只拋出URL連接請求的views方法中的異常,不會拋出process_request,process_views中的異常,並且全部的異常拋出後纔會從第一個process_response方法返回給客戶端請求的內容。
  • process_response:請求獲取到數據返回的路徑。注:必有返回值 且 return 要返回固定參數。

2.CSRF(跨站請求僞造):

默認狀況下不使用任何方法或裝飾器,在Django項目配置文件setting.py文件的MIDDLEWARE的csrf管道會攔截post請求。html

  • 在使用form表單發送post請求時要在表單的裏面加入{% csrf_token %}java

  • 在使用Ajax發送post請求時要在Ajax裏面的請求投headers加入{'X-CSRFToken':$.cookie('csrftoken')} ---(要導入Jquery文件和Jq的cookies文件)若是想全局設置headers就可使用:python

    //使用此方法就不用再ajax中再設置headers請求頭
    <script>
        $(function(){
            $.ajaxSetup({
                beforeSend:function(xhr){
                    xhr.setRequestHeader("X-CSRFToken",$.cookie('csrftoken'));
                }
            });
        });
    </script>
  • $.cookie('csrftoken')是cookies的csrftoken隨機字符串,csrf原理和cookie類似,他會給通過的信息作標記,攜帶此標記纔不會被攔截,$.cookie('csrftoken')的做用就是獲取cookie的那個標記(csrf隨機生成的字符串)ajax

  • 因爲中間件是針對全局操做的,當註釋 #'django.middleware.csrf.CsrfViewMiddleware',整個網站的連接都不會執行CSRF驗證,若是要針對某個連接請求操做使用CSRF操做能夠在Views文件的方法上使用裝飾器:@csrf_protect(聲名使用CSRF)-- 全局不使用CSRF時,某幾個須要使用時 --數據庫

  • 因爲中間件是針對全局操做的,當使用 'django.middleware.csrf.CsrfViewMiddleware',整個網站的連接都會執行CSRF驗證,若是要針對某個連接請求禁止經過CSRF操做能夠在Views文件的方法上使用裝飾器:@csrf_exempt(聲名禁止CSRF)-- 全局使用CSRF時,某幾個不須要使用時 --django

3.緩存

在settings.py文件裏面配置:緩存級別bootstrap

  • 全棧緩存:要使用兩個特殊的中間件,放在setting的MIDDLEWARE列表裏面,最上面一個,最下面一個。轉載:https://www.cnblogs.com/wupeiqi/articles/5246483.html(裏面包含緩存Session等知識)。
  • 單獨視圖緩存
  • 局部視圖緩存

Django的六種緩存方式:緩存

  • 開發調試:調試時使用,實際內部不作任何操做安全

  • 內存:緩存的內容存在內存中

  • 文件:緩存的內容存在文件中

  • 數據庫:緩存的內容存在數據庫中

  • Memcache緩存(python-memcached模塊):此緩存使用python-memcached模塊鏈接Memcache(另一臺機器)能夠有三種連接方式,連接另外一臺機器,連接本機,連接多臺機器。

  • Memcache緩存(pylibmc模塊):此緩存使用pylibmc模塊鏈接Memcache(另一臺機器)能夠有三種連接方式,連接另外一臺機器,連接本機,連接多臺機器。

  • 關於緩存更詳細的內容請看轉載連接:https://www.cnblogs.com/wupeiqi/articles/5246483.html

  • 關於緩存更詳細的內容請看轉載連接:https://www.cnblogs.com/wupeiqi/articles/5132791.html

    CACHES = {
        'default':{
            'BACKEND':'django.core.cache.backends.dummy.DummyCache' #引擎(開發調試的引擎)
            'TIMEOUT':300,       #緩存超時時間(默認300,None表示永不過時,0表示當即過時)
            'OPTIONS':{
                'MAX_ENTRIES':300,  #最大緩存個數(默認300)
                'CULL_FREQUENCY':3, #緩存到達最大數以後,剔除緩存個數的比例:1/CULL_FREQUENCY:3,只的是分數1/3,三分之一。
            },
            'KEY_PREFIX':'',        #緩存key的前綴(默認空)
            'VERSION':1,            #緩存key的版本(默認1)
            'KEY_FUNCTION':函數名,   #生成key的函數(默認函數會生成爲:[前綴:版本號:key])
        }
    }

4.信號(Django預留的鉤子)

  1. 內置信號:在指定信號中注入操做函數

    做用:使用Django內部定義的信號,在指定位置 注入 指定操做(觸發信號)

  2. 自定義信號:可應用於任何地方,可動態配置

    注:也能夠自定義信號

  3. 大多用於大型程序的可擴展項

Model signals
    pre_init     #django的modal執行其構造方法前,自動觸發
    post_init    #django的model執行其構造方法後,自動觸發
    pre_save     #django的model對象保存前,自動觸發
    post_save    #django的model對象保存後,自動觸發
    pre_delete   #django的model對象刪除前,自動觸發
    post_delete  #django的model對象刪除後,自動觸發
    m2m_changed  #django的model中使用m2m字段操做第三張表(add,remove,clear)先後,自動觸發
    #程序啓動時,檢測已註冊的app中modal類,對於每個類,自動觸發
Management signals
    pre_migrate  #執行migrate命令前,自動觸發
    post_migrate #執行migrate命令後,自動觸發
Request/resonse signals
    request_atarted        #請求到來前,自動觸發
    request_finished       #請求結束後,自動觸發
    got_request_exception  #請求異常後,自動觸發
Test signals
    setting_changed        #使用test測試修改配置文件時,自動觸發
    template_rendered      #使用test測試渲染模板時,自動觸發
Database Wrappers
    connection_created     #建立數據庫鏈接時,自動觸發
使用方法:
from django.db.models.signals import class_prepared
def callback(sender,**Kwargs):
    print("pre_init_callback")
    print(sender,kwargs)
pre_init.connect(callback)
#導入方法:鉤子函數名.connect(寫好的函數)
#要在項目的__init__.py文件中寫或導入

5.BootStrap(模板)-響應式(柵格)+ 模板

下載BootStrap,詳細操做請看官方文檔。

相關文章
相關標籤/搜索