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