我收到一個只在我的服務器上的生產模式下發生的CSRF_Token錯誤。但是,當我使用runserver命令從計算機終端運行它時,一切正常。我已閱讀了許多與此有關的其他問題,但沒有運氣。看起來,我的情況與其他情況稍有不同,因爲它在本地工作,但不在生產中。Django CSRF令牌只在生產中丟失
提交提交給views.py中的「submit」的Ajax表單時出現錯誤。有誰知道可能是什麼原因造成的?另外,在Production模式下查看我的cookie,CSRF_Token甚至不在那裏開始。本地它是。謝謝你的幫助。
這裏是我的views.py
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return render(request, 'index.html')
def submit(request):
#Receive Request
inputone = request.POST['randominfo']
inputtwo = request.POST['randominfo2']
#Some more code here that setups response.
#Deleted since Im posting to StackOverflow
return response
代碼用於修飾阿賈克斯提交
$(function() {
$.ajaxSetup({
headers: { "X-CSRFToken": getCookie("csrftoken") }
});
});
function getCookie(c_name)
{
if (document.cookie.length > 0)
{
c_start = document.cookie.indexOf(c_name + "=");
if (c_start != -1)
{
c_start = c_start + c_name.length + 1;
c_end = document.cookie.indexOf(";", c_start);
if (c_end == -1) c_end = document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}
function submitAjax(event){
$.ajax({
type:'POST',
url:'/submit/',
data:{
randominfo:document.getElementById('Random').innerHTML,
randominfo2:document.getElementById('Random2').innerHTML,
},
dateType: 'json',
success:function() {
# Url here
}
})
};
解決方案是固定的這個問題。
「從django.views.decorators.csrf進口ensure_csrf_cookie」在views.py然後在查看上述「@ensure_csrf_cookie」返回包含ajax的形式
爲什麼不乾脆把'{%csrf_token%}'到您的模板直接,而不是試圖把它弄出來的餅乾? –
那是我沒有嘗試過的一件事。生病報告回來。謝謝 –