我找不到为文件上传API建立架构的任何支持。 Swagger用户界面必须具有一个按钮,测试人员可以通过该按钮上传文件以进行测试。我正在使用firebase作为数据库,因此序列化器和模型不会出现在图片中。我只使用Django的rest框架。
我看过drf-yasg的文档,该文档建议使用Operation进行文件上传。但这是一个非常抽象且晦涩的文档。
答案 0 :(得分:1)
看看这个issue。您可以找到如何使用 @swagger_auto_schema 来创建这样的东西
答案 1 :(得分:0)
确保在视图中指定parser_classes
。默认情况下,它是不处理文件上传的JSON解析器。使用MultiPartParser
或FileUploadParser
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)