Javascript 无法将FormData解析到django后端
希望你们都做得很好我一直在做一个自定义表单,我想通过ajax请求发送到django后端,我遇到的唯一问题是,我正在将表单包装到FormData中。它在前端站点上运行良好,但在后端,它显示了一个查询信息,其中包含一些strane数据,如果有办法轻松获取数据,则会使解析数据变得更加困难 任何线索或任何回应都非常感谢 下面是将数据发送到后端的javascript函数的代码 Javascript views.py 将request.POST转换为它提供的dictionary对象后Javascript 无法将FormData解析到django后端,javascript,python,django,ajax,forms,Javascript,Python,Django,Ajax,Forms,希望你们都做得很好我一直在做一个自定义表单,我想通过ajax请求发送到django后端,我遇到的唯一问题是,我正在将表单包装到FormData中。它在前端站点上运行良好,但在后端,它显示了一个查询信息,其中包含一些strane数据,如果有办法轻松获取数据,则会使解析数据变得更加困难 任何线索或任何回应都非常感谢 下面是将数据发送到后端的javascript函数的代码 Javascript views.py 将request.POST转换为它提供的dictionary对象后 {'------Web
{'------WebKitFormBoundaryW30RtYeVz4cXnUNf\r\nContent-Disposition: form-data; name': ['"type"\r\n\r\nidea\r\n------WebKitFormBoundaryW30RtYeVz4cXnUNf\r\nContent-Disposition: form-data; name="id"\r\n\r\n1\r\n------WebKitFormBoundaryW30RtYeVz4cXnUNf\r\nContent-Disposition: form-data; name="title"\r\n\r\nProgramming is great\r\n------WebKitFormBoundaryW30RtYeVz4cXnUNf\r\nContent-Disposition: form-data; name="privacy"\r\n\r\n public\r\n------WebKitFormBoundaryW30RtYeVz4cXnUNf\r\nContent-Disposition: form-data; name="requirements"\r\n\r\nnothing\r\n------WebKitFormBoundaryW30RtYeVz4cXnUNf\r\nContent-Disposition: form-data; name="category"\r\n\r\nFisica\r\n------WebKitFormBoundaryW30RtYeVz4cXnUNf\r\nContent-Disposition: form-data; name="idea-content"\r\n\r\nProgramming is not for kids\r\n------WebKitFormBoundaryW30RtYeVz4cXnUNf\r\nContent-Disposition: form-data; name="media"; filename=""\r\nContent-Type: application/octet-stream\r\n\r\n\r\n------WebKitFormBoundaryW30RtYeVz4cXnUNf--\r\n']}
这很难用正则表达式解析,有没有更简单的方法
正在动态添加表单,但表单的基本结构如下所示:
HTML表单
request.POST是一个类似字典的对象,但不是标准字典 您可以使用此符号访问普通文本数据 data=request.POST title=data.gettitle,无 隐私=数据。getprivacy,无 需求=数据。getrequirements,无 类别=数据。getcategory,无 内容=数据。getidea内容,无 或者
title = request.POST.get("title", None)
POST不包含文件上载信息,因此您需要调用其他请求属性才能访问它们
request.FILES.get('media')
通过手动迭代表单的每个输入字段并序列化它,我自己解决了这个问题 javascript代码如下所示
var form_data=new FormData()
$("form#edit-form :input").each(function(){
var input = this; // This is the jquery object of the input, do what you will
console.log(input)
if(this.name == "media"){
form_data.append(this.name,this.files[0])
}
else{
form_data.append(this.name,this.value)
}
});
删除processData:false会导致非法调用的错误我通常也会这样做,但是使用Formdata发送表单会给出一个奇怪的dict,所有数据都围绕着不必要的字符串,而不发出请求。发布一个普通的类似字典的对象,如果您只处理文本数据,它会起作用。但是您也尝试上载包含该表单数据的文件。可能您缺少表单数据中的multipart enctype属性multipart/form data也被添加到表单中
title = request.POST.get("title", None)
request.FILES.get('media')
var form_data=new FormData()
$("form#edit-form :input").each(function(){
var input = this; // This is the jquery object of the input, do what you will
console.log(input)
if(this.name == "media"){
form_data.append(this.name,this.files[0])
}
else{
form_data.append(this.name,this.value)
}
});