我使用ExtJs來創建一個按鈕,做一個Ajax發佈到我的Django應用程序,但該帖子被FORBIDDEN(403)錯誤阻止。Django - 發佈阿賈克斯請求禁止403與ExtJS
我tryed由沒有成功的自定義X-CSRFToken頭設置爲CSRF令牌(https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#ajax)的值
ExtJS.js
action = new Ext.Button({
text: 'Ajax Test',
handler: function() {
Ext.Ajax.request({
url: 'test/',
method: 'POST',
headers: { 'Content-Type': 'application/json'},
params: {'test': 'test'},
success: function(response, opts) {
var obj = Ext.decode(response.responseText);
console.dir(obj);
},
failure: function(response, opts) {
console.log('server-side failure');
}
});
},
});
視圖傳遞CSRF令牌作爲POST數據的.py
def test(request):
print "TEST WORKING"
print dict(request.POST.copy().iteritems())
return HttpResponse("")
CHROME網絡標籤:
響應:
CSRF verification failed. Request aborted.
餅乾:
Request Cookies:
csrftoken : S7uLgmhqeprWqL4NdH9mznIfpTgyM9RP
djdt : hide
djdttop : 30
sessionid : sx4ukmkitqp39wvuve1a9zed2kjiwfb1
Response Cookies:
(empty)
接頭:
Request URL:http://127.0.0.1:8000/basqui/layer/edit/2/test/
Request Method:POST
Status Code:403 FORBIDDEN
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Length:9
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:sessionid=sx4ukmkitqp39wvuve1a9zed2kjiwfb1; csrftoken=S7uLgmhqeprWqL4NdH9mznIfpTgyM9RP; djdttop=30; djdt=hide
Host:127.0.0.1:8000
Origin:http://127.0.0.1:8000
Referer:http://127.0.0.1:8000/basqui/layer/edit/2
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
X-Requested-With:XMLHttpRequest
Form Dataview sourceview URL encoded
test:test
Response Headersview source
Content-Type:text/html
Date:Tue, 07 Jan 2014 16:52:15 GMT
Server:WSGIServer/0.1 Python/2.7.5
X-Frame-Options:SAMEORIGIN
顯示我們Django的視圖以及.. – mariodev
添加CSRF令牌是正確的解決方案,可以請你加了一遍,然後做請求和複製/從瀏覽器開發工具網絡標籤粘貼帖子和回覆? – krs
習慣上,添加CSRF令牌時,ajax文章正在工作。我認爲它不在這裏工作,因爲ajax初始化通過extJS –