【问题标题】:Request data empty with formData - Django Rest Framework使用 formData 请求空数据 - Django Rest Framework
【发布时间】:2021-08-08 00:34:59
【问题描述】:

我正在尝试通过向 Django Rest Framework 后端发出的POST 请求保存字符串、浮点数和图像:

# My view:

class CreatePost(APIView):
    # tried with and without parser:
    # parser_classes = [FormParser, MultiPartParser]

    def post(self, request):
        serializer = PostSerializer(data=request.data)
        if serializer.is_valid(raise_exception=True):
            serializer.save(user_id=request.user.pk)
            return Response(serializer.data, status=201)
        return Response(serializer.errors, status=400)


# My serializer:

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ("x", "y")

还有我的 JS 前端:

const postBody = new FormData();
postBody.append('x', 'someValue');
postBody.append('y', 'someValue');

fetch('/api/v1/post', {
    method: 'post',
    body: postBody,
    credentials: 'same-origin',
    headers: {
      'X-CSRFToken': getCookie('csrftoken'),
      'Content-Type': 'multipart/form-data'
    }
  }

但是,以'Content-Type': 'multipart/form-data' 发送不会在我的后端显示request.data 中的任何值。application/json 发送有效,但当其中一个字段是图像时无效。

如何使用form-data 处理文本和图像? 我尝试使用解析器(FormParserMultiPartParser)但没有成功。

【问题讨论】:

  • This 可能有帮助

标签: django django-rest-framework


【解决方案1】:

正如https://docs.djangoproject.com/en/3.2/topics/http/file-uploads/#basic-file-uploads 中的文档所说:

请注意,request.FILES 仅在请求方法为 POST、实际发布了至少一个文件字段且发布请求具有属性 enctype="multipart/form-data" 的情况下才会包含数据。否则,request.FILES 将为空。

对于 drf 中的文件,FileUploadParser 可能会有所帮助。文档在https://www.django-rest-framework.org/api-guide/parsers/#fileuploadparser

【讨论】:

  • The FileUploadParser is for usage with native clients that can upload the file as a raw data request. For web-based uploads, or for native clients with multipart upload support, you should use the MultiPartParser instead.。我的是基于网络的。
猜你喜欢
  • 1970-01-01
  • 2018-05-30
  • 2019-11-22
  • 1970-01-01
  • 2023-01-08
  • 2019-04-14
  • 2013-03-12
  • 2016-11-06
  • 2021-01-19
相关资源
最近更新 更多