天天看點

python中django架構的csrf驗證

在form表單以post的方式送出時,django預設會帶一個驗證的機制csrf驗證

python中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>      
python中django架構的csrf驗證

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

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

解決辦法:在送出的請求頭,用cookie的變量發送,請求頭裡不能有下劃線(注意)

python中django架構的csrf驗證
$.ajax({
                    url:'/day02/login/',
                    type:'POST',
                    data:{'user':'keke','pwd':'123'},
                    headers:{'X-CSRFtoken':$.cookie('csrftoken')},
                    suceess:function (arg) {

                    }      
python中django架構的csrf驗證

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

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

繼續閱讀