1. 程式人生 > >Django 如何讓ajax的POST方法帶上CSRF令牌

Django 如何讓ajax的POST方法帶上CSRF令牌

post turn settings fun IV length 異步 var 服務

大家知道,在大前端領域,有一種叫做ajax的東東,即“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),它被用來在不刷新頁面的情況下,提交和請求數據。如果Django服務器接收的是一個通過ajax發送過來的POST請求的話,那麽將很麻煩。何也?因為在ajax中,沒有辦法像form表單中那樣攜帶{% csrf_token %}令牌。那怎麽辦呢?好辦!在你的前端模版的JavaScript代碼處,添加下面的代碼:

// 使用jQuery庫
function getCookie(name) {
    var cookieValue = null
; if (document.cookie && document.cookie !== ‘‘) { var cookies = document.cookie.split(‘;‘); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) === (name + ‘=‘)) { cookieValue
= decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } var csrftoken = getCookie(‘csrftoken‘); function csrfSafeMethod(method) { // 這些HTTP方法不要求CSRF包含 return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); } $.ajaxSetup({ beforeSend:
function(xhr, settings) { if (!csrfSafeMethod(settings.type) && !this.crossDomain) { xhr.setRequestHeader("X-CSRFToken", csrftoken); } } });

上面代碼的作用就是讓你的ajax的POST方法帶上CSRF需要的令牌,它依賴jQuery庫,必須提前加載jQuery。這也是Django官方提供的解決方案,請參考。

  至此。

Django 如何讓ajax的POST方法帶上CSRF令牌