无法将FormData解析到django后端



希望大家都做得很好我一直在处理一个自定义表单,我想通过ajax请求将其发送到django后端,我遇到的唯一问题是我将表单包装到FormData中它在前端站点上运行良好,但在后端它显示了一个querydict,其中包含一些strane数据,使解析数据变得更加困难,如果有一种方法可以很容易地获取数据。

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

以下是我的javascript函数代码,它将数据发送到后端

Javascript

function Edit_Content(e){

var form_data=new FormData(document.querySelector("#edit-form"))
let csrftoken=getCookie("csrftoken")

$.ajax({
url:"{% url 'EditPost' %}",
method:"post",
datatype:"json",
processData:false,
"headers":{
"X-CSRFToken":csrftoken
},
data:form_data,
success:function (data){
console.log("Post or idea edited")
}
})

}

视图.py

def Edit(request):
print(request.POST,request.FILES)
data=dict(request.POST)
print(data)
if data["type"] == "post":
post=Post.objects.get(pk=data['id'])
content=data.get("post-content",None)
media=data.get("media",None)
post.edit(content,media)
else:
idea=Idea.objects.get(pk=data["id"])
title=data.get("title",None)
privacy=data.get("privacy",None)
requirements=data.get("requirements",None)
category=data.get("category",None)
content=data.get("idea-content",None)
media=data.get("media",None)
idea.edit(requirements,title,privacy,category,content,media)
return HttpResponse(status=200)

转换请求后。POST到字典对象它给

{'------WebKitFormBoundaryW30RtYeVz4cXnUNfrnContent-Disposition: form-data; name': ['"type"rnrnidearn------WebKitFormBoundaryW30RtYeVz4cXnUNfrnContent-Disposition: form-data; name="id"rnrn1rn------WebKitFormBoundaryW30RtYeVz4cXnUNfrnContent-Disposition: form-data; name="title"rnrnProgramming is greatrn------WebKitFormBoundaryW30RtYeVz4cXnUNfrnContent-Disposition: form-data; name="privacy"rnrn publicrn------WebKitFormBoundaryW30RtYeVz4cXnUNfrnContent-Disposition: form-data; name="requirements"rnrnnothingrn------WebKitFormBoundaryW30RtYeVz4cXnUNfrnContent-Disposition: form-data; name="category"rnrnFisicarn------WebKitFormBoundaryW30RtYeVz4cXnUNfrnContent-Disposition: form-data; name="idea-content"rnrnProgramming is not for kidsrn------WebKitFormBoundaryW30RtYeVz4cXnUNfrnContent-Disposition: form-data; name="media"; filename=""rnContent-Type: application/octet-streamrnrnrn------WebKitFormBoundaryW30RtYeVz4cXnUNf--rn']}

用正则表达式很难解析,有什么更简单的方法吗?

表单是动态添加的,但表单的基本结构如下:

HTML表单

<form id="edit-form" enctype="multipart/form-data">

</form>

请求。POST是一个类似字典的对象,但不是您的标准字典。

您可以使用这种表示法访问正常的文本数据。

data = request.POST
title=data.get("title",None)
privacy=data.get("privacy",None)
requirements=data.get("requirements",None)
category=data.get("category",None)
content=data.get("idea-content",None)

替代

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

最新更新