4

我找不到为文件上传 API 制作架构的任何支持。Swagger UI 必须有一个按钮,允许测试人员上传文件以进行测试。我使用 firebase 作为数据库,因此序列化程序和模型不会出现。我只使用 Django 的 rest 框架。

我查看了建议使用 Operation 进行文件上传的 drf-yasg 文档。但它是一个非常抽象和晦涩的文档。

4

3 回答 3

8

确保parser_classes在视图中指定。默认情况下,它是不处理文件上传的 JSON 解析器。使用MultiPartParserFileUploadParser

class MyUploadView(CreateAPIView):
    parser_classes = (MultiPartParser,)
    ...

    @swagger_auto_schema(operation_description='Upload file...',)
    @action(detail=False, methods=['post'])
    def post(self, request, **kwargs):
        # Code to handle file

于 2019-08-06T23:50:02.980 回答
1

看看这个问题。你可以找到如何使用@swagger_auto_schema来创建这样的东西

在此处输入图像描述

于 2021-04-28T21:02:18.507 回答
0

这是我项目中的工作示例

from rest_framework import parsers, renderers, serializers, status
from rest_framework.generics import GenericAPIView
from rest_framework.response import Response


class ContactSerializer(serializers.Serializer):
    resume = serializers.FileField()


class ContactView(GenericAPIView):
    throttle_classes = ()
    permission_classes = ()
    parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.FileUploadParser)
    renderer_classes = (renderers.JSONRenderer,)
    serializer_class = ContactSerializer

    def post(self, request):
        serializer = self.serializer_class(data=request.data)
        if serializer.is_valid(raise_exception=True):
            data = serializer.validated_data
            resume = data["resume"]
            # resume.name - file name
            # resume.read() - file contens
            return Response({"success": "True"})
        return Response({'success': "False"}, status=status.HTTP_400_BAD_REQUEST)
于 2021-07-01T07:03:58.887 回答