1.介紹 我們之前從前端給後端發送數據的時候,一直都是把setting中中間件里的的csrftoken這條給註釋掉,其實這個主要起了一個對保護作用,以免惡意性數據的攻擊。但是這樣直接註釋掉並不是理智型的選擇,這裡我們介紹以下幾種方式來解決這個問題。 csrf原理:先發送get請求,在用戶瀏覽器上藏一 ...
1.介紹
我們之前從前端給後端發送數據的時候,一直都是把setting中中間件里的的csrftoken這條給註釋掉,其實這個主要起了一個對保護作用,以免惡意性數據的攻擊。但是這樣直接註釋掉並不是理智型的選擇,這裡我們介紹以下幾種方式來解決這個問題。
csrf原理:先發送get請求,在用戶瀏覽器上藏一段隨機字元串,發送post請求時,瀏覽器自動攜帶該字元串來進行識別
2.方式一
在前端中添加{% csrf_token %},前端ajax發送的data數據中加上:
csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val()
3.方式二
在ajax中添加X-CSRFToken的請求頭,必須從cookie中取csrftoken的值
$('#login').click(function () {
$.ajax(
{
url:{% url 'login' %},
type: 'post',
headers:{ "X-CSRFToken":$.cookie('csrftoken') },
data: {
user: $('[name="user"]').val(),
pwd: $('[name="pwd"]').val()
},
success: function (data) {
data = JSON.parse(data);
if (data.status) {
window.location = data.url
}
else {
alert('登陸錯誤')
}
}
}
)
})
4.方式三
使用$.ajaxSetup()給全局的ajax添加預設參數
$.ajaxSetup({
headers: {"X-CSRFToken": $.cookie('csrftoken')},
});
PS:遇到問題沒人解答?需要Python學習資料?可以加點擊下方鏈接自行獲取
note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee34324d76
5.方式四
在需要設置cookie的視圖上加裝飾器 ensure_csrf_cookie()
from django.views.decorators.csrf import ensure_csrf_cookie
@ensure_csrf_cookie
def server(request):
return render(request, 'server.html')