即使我已经包含csrf_token
,我仍然会收到上述错误。我已经对我的其他ajax调用使用了相同的csrfmiddlewaretoken
并且它工作正常但在这里我得到了禁止的错误。知道为什么吗?
这是我的表格:
<form method="post" enctype="multipart/form-data" id="profileImageForm">{% csrf_token %}
<label for="id_banner_image" class="change_profile_img">change
<input id="id_banner_image" type="file" name="image" />
</label>
<input type="submit">
</form>
这是我的JS:
$(document).on('submit', '#profileImageForm', function(e){
e.preventDefault();
var form_data = new FormData();
var image = document.getElementById('id_banner_image').files[0].name;
form_data.append('file', image);
$.ajax({
type:'POST',
url: '/change_banner_image/',
data : {
form_data: form_data,
csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val(),
},
cache: false,
contentType: false,
processData: false,
success: function(response){
console.log('Success');
},
});
});
答案 0 :(得分:0)
当我使用Django&amp ;;时出现奇怪的CSRF错误Ajax,通常是因为我错过了这些部分:
https://docs.djangoproject.com/en/1.11/ref/csrf/
基本上,上面文档中提供的这一段代码将处理大部分使用ajax调用获取和传递CSRF令牌的代码。
// using 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');
//Now use it on ajax
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
将此信息包含在您的网页上,看看是否可以解决您的问题。我不知道为什么如果你说其他人那么这段特殊的代码是行不通的......如果没有看到项目的其他部分就很难说。