如何从formdata获取发布数据

时间:2017-09-24 09:40:18

标签: python ajax django python-3.x django-rest-framework

我很困惑如何从ajax formdata获取数据。我到现在才使用get请求。我之前从未使用过formdata。所以,我不知道如何处理数据。

我的客户端脚本如下。

var formData = new FormData();
formData.append('filename', image_file_name);
formData.append('image', image_file);

$.ajax({
    url: HOST_NAME + "user/api/file_uploader/",
    type: 'POST',
    dataType: 'json',
    timeout: 10000,
    data: formData,
    processData: false,
    contentType: false
})
.done(function (data) {
    console.log("success");
})
.fail(function (XMLHttpRequest, textStatus, errorThrown) {
    console.log("failed");
})

我的服务器端代码如下。

def post(self, request, format=None):
    outputLogFile("Upload Function is called...")
    req_file_name = request.POST.form['filename']
    req_image = request.POST.form['image']

我想将文件名转换为req_file_name并将图像转换为req_image。但我不知道应该怎样做才能实现这一目标。

请提出建议。

1 个答案:

答案 0 :(得分:3)

通过request.FILES而不是request.POST访问文件,因此您应该使用:

def post(self, request, *args, **kwargs):
    req_image = request.FILES["image"]
    req_file_name = request.data["filename"]

当我使用它创建图像上传时,我通常将其添加到我的APIView:

class ExampleImageUpload(APIView):
    parser_classes = (JSONParser, FormParser, MultiPartParser, )

不要忘记导入它们:

from rest_framework.parsers import JSONParser, FormParser, MultiPartParser

此外,您不需要dataType: 'json',,所以我只是删除它。