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

yebdmbv4  于 2024-01-08  发布在  Go
关注(0)|答案(4)|浏览(287)

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

bwntbbo3

bwntbbo31#

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

  1. class MyUploadView(CreateAPIView):
  2. parser_classes = (MultiPartParser,)
  3. ...
  4. @swagger_auto_schema(operation_description='Upload file...',)
  5. @action(detail=False, methods=['post'])
  6. def post(self, request, **kwargs):
  7. # Code to handle file

字符串

oiopk7p5

oiopk7p52#

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

  1. from rest_framework import parsers, renderers, serializers, status
  2. from rest_framework.generics import GenericAPIView
  3. from rest_framework.response import Response
  4. class ContactSerializer(serializers.Serializer):
  5. resume = serializers.FileField()
  6. class ContactView(GenericAPIView):
  7. throttle_classes = ()
  8. permission_classes = ()
  9. parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.FileUploadParser)
  10. renderer_classes = (renderers.JSONRenderer,)
  11. serializer_class = ContactSerializer
  12. def post(self, request):
  13. serializer = self.serializer_class(data=request.data)
  14. if serializer.is_valid(raise_exception=True):
  15. data = serializer.validated_data
  16. resume = data["resume"]
  17. # resume.name - file name
  18. # resume.read() - file contens
  19. return Response({"success": "True"})
  20. 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")]

相关问题