如何使用drf-yasg在django-rest-framework中为文件上传API制作swagger模式?

yebdmbv4  于 12个月前  发布在  Go
关注(0)|答案(4)|浏览(211)

我无法找到任何支持为文件上传API创建模式的工具。Swagger UI必须有一个按钮,允许测试人员上传文件用于测试目的。我使用firebase作为数据库,因此序列化器和模型不会出现在图片中。我只使用Django的rest框架。
我看过drf-yasg的文档,其中建议使用Operation进行文件上传。但它是一个非常抽象和晦涩的文档。

bwntbbo3

bwntbbo31#

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

字符串

oiopk7p5

oiopk7p52#

下面是我的项目中的工作示例

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)

字符串

q9rjltbz

q9rjltbz3#

看看这个issue。你可以找到如何使用 @swagger_auto_schema 来创建这样的东西
x1c 0d1x的数据

6rqinv9w

6rqinv9w4#

使用@swagger_auto_schema并使用以下manual_parameters上传文件manual_parameters=[openapi.Parameter(name="file",in_=openapi.IN_FORM,type=openapi.TYPE_FILE,required=True,description="Document")]

相关问题