Javascript 无法将FormData解析到django后端

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

希望你们都做得很好我一直在做一个自定义表单,我想通过ajax请求发送到django后端,我遇到的唯一问题是,我正在将表单包装到FormData中。它在前端站点上运行良好,但在后端,它显示了一个查询信息,其中包含一些strane数据,如果有办法轻松获取数据,则会使解析数据变得更加困难

任何线索或任何回应都非常感谢

下面是将数据发送到后端的javascript函数的代码

Javascript views.py 将request.POST转换为它提供的dictionary对象后

{'------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)
    }
    });