如何使用drf-yasg在django-rest-framework中为文件上传API制定醒目的架构?

时间:2019-08-06 19:27:06

标签: django swagger drf-yasg

我找不到为文件上传API建立架构的任何支持。 Swagger用户界面必须具有一个按钮,测试人员可以通过该按钮上传文件以进行测试。我正在使用firebase作为数据库,因此序列化器和模型不会出现在图片中。我只使用Django的rest框架。

我看过drf-yasg的文档,该文档建议使用Operation进行文件上传。但这是一个非常抽象且晦涩的文档。

3 个答案:

答案 0 :(得分:1)

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

enter image description here

答案 1 :(得分:0)

确保在视图中指定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

答案 2 :(得分: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)