1.介紹html
咱們以前從前端給後端發送數據的時候,一直都是把setting中中間件裏的的csrftoken這條給註釋掉,其實這個主要起了一個對保護做用,以避免惡意性數據的攻擊。可是這樣直接註釋掉並非理智型的選擇,這裏咱們介紹如下幾種方式來解決這個問題。前端
csrf原理:先發送get請求,在用戶瀏覽器上藏一段隨機字符串,發送post請求時,瀏覽器自動攜帶該字符串來進行識別python
2.方式一ajax
在前端中添加{% csrf_token %},前端ajax發送的data數據中加上:django
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添加默認參數cookie
$.ajaxSetup({ headers: {"X-CSRFToken": $.cookie('csrftoken')}, });
PS:遇到問題沒人解答?須要Python學習資料?能夠加點擊下方連接自行獲取
note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee34324d76post
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')