formdata = new FormData($form);
case ("filesystem"):
$.ajax({
type:"POST",
url:$form.attr('action'),
xhr: xhr_provider,
data: formdata,
processData: false,
contentType:false
})
.fail(function(Response){alert(Response.responseText)})
.done(function(response){
alert("111");
if (response.has_errors){
render_errors($form, response);
} else {
$form.closest(".modal").modal("hide");
}
});
alert("12345");
break;
当我尝试将包含文件的 formdata
发送到 Django 时,我将面临两个问题:
如果我按照所有其他建议设置 processData: false
和 contentType:false
,Django 将拒绝此 POST 并显示 403 错误。
如果我注释掉将 processData
和 contentType
设置为 false
的这两行,Jquery 将抛出 Uncaught TypeError:非法调用
,这是另一个常见问题,解决方案是设置processData: false
和contentType:false
。同时,包含文件的formdata已成功发送到Django并处理无误。
所以我很困惑,我应该怎么做才能将带有文件的表单数据发送到 Django
最佳答案
在您的 views.py
中,您应该将此装饰器放入函数中以处理 post 以防止 403:
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def your_function(request):
# your logic
关于jquery - 当 jquery ajax 发布带有 processData=false 的 formdata 时,csrf_token 的 Django 响应 403 被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27497145/