1. 程式人生 > >python中django框架的csrf驗證

python中django框架的csrf驗證

驗證 觸發 pwd checkbox 參數 setup quest class 設置

在form表單以post的方式提交時,django默認會帶一個驗證的機制csrf驗證

<form action="/day02/login/" method="post">
    {% csrf_token %}
    用戶名: <input type="text" name="user">
    密碼 <input type="text" name="pwd">
    <input type="checkbox" name="deng" value="1">10秒免登陸
    <input type="submit" value="提交
"> <input type="button" value="點擊" id="btn"> </form>

必須把隨機cookie驗證發過去,這樣django機制才能驗證成功

若是采用ajax的post方式提交則會出現403 Forbidden的驗證

解決辦法:在提交的請求頭,用cookie的變量發送,請求頭裏不能有下劃線(註意)

 $.ajax({
                    url:/day02/login/,
                    type:POST,
                    data:{user:
keke,pwd:123}, headers:{X-CSRFtoken:$.cookie(csrftoken)}, suceess:function (arg) { }

若是多個ajax一起觸發,每次都請求有點麻煩,在ajax裏有一個觸發前的機制。

    $.ajaxSetup({
               beforeSend:function (xhr,settings) {
                   xhr.setRequestHeader(
X-CSRFtoken,$.cookie(csrftoken)); } });

在ajax之前的驗證提交。參數是固定的。

但是這樣寫有個弊端,就是所有的ajax不管是get還是post,還是其他的請求都會走一遍ajax,

若有get提交,不想讓它請求的,在django裏有裝飾器這個參數來設置。

python中django框架的csrf驗證