python中django框架的csrf驗證


在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里有裝飾器這個參數來設置。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM