django 中避免csrf錯誤

1. settings.py 中 MIDDLEWARE_CLASSES 中 注釋掉'django.middleware.csrf.CsrfViewMiddleware'

2.在項目的views.py 的方法上加上 @csrf_exempt 裝飾 (需要 from django.views.decorators.csrf import csrf_exempt)

3.在對應(yīng)的html頁面的form表單中<input>前{% csrf_token %};

如果是ajax方式提交的,第三種方法不適用,此時需要在static中添加一個js文件,在頁面引入該js,內(nèi)容如下:

/*====================django ajax ======*/

jQuery(document).ajaxSend(function(event, xhr, settings) {

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;

}

function sameOrigin(url) {

// url could be relative or scheme relative or absolute

var host = document.location.host; // host + port

var protocol = document.location.protocol;

var sr_origin = '//' + host;

var origin = protocol + sr_origin;

// Allow absolute or scheme relative URLs to same origin

return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||

(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||

// or any other URL that isn't scheme relative or absolute i.e relative.

!(/^(\/\/|http:|https:).*/.test(url));

}

function safeMethod(method) {

return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));

}

if (!safeMethod(settings.type) && sameOrigin(settings.url)) {

xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));

}

});

/*===============================django ajax end===*/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 此段內(nèi)容簡要來自自強學(xué)堂的教程詳情請查詢自強學(xué)堂 一、 后臺的運作流程 接收request請求 處理數(shù)據(jù) 獲取請求...
    coder_ben閱讀 5,345評論 6 56
  • http://www.91ri.org/tag/fuzz-bug 通常情況下,有三種方法被廣泛用來防御CSRF攻擊...
    jdyzm閱讀 4,393評論 0 5
  • 經(jīng)過對django的初步學(xué)習(xí),我們已經(jīng)對后臺的基本流程以及django的運作有了一定的了解,但是這還不足夠,dja...
    coder_ben閱讀 3,958評論 8 34
  • 前端開發(fā)面試知識點大綱: HTML&CSS: 對Web標準的理解、瀏覽器內(nèi)核差異、兼容性、hack、CSS基本功:...
    秀才JaneBook閱讀 2,774評論 0 25
  • 今天webryan給team做了一個關(guān)于HTTP cookie的分享,從各個方面給大家介紹一下大家耳熟能詳?shù)腃oo...
    秒贊不是偶然閱讀 8,819評論 0 20

友情鏈接更多精彩內(nèi)容