希望大家都做得很好我一直在处理一个自定义表单,我想通过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)
}
});