[英]How to make swagger schema for file upload API in django-rest-framework using drf-yasg?
I am not able to find any support for making a schema for the file upload API.我找不到为文件上传 API 制作架构的任何支持。 The Swagger UI must have a button allowing a tester to upload a file for testing purposes. Swagger UI 必须有一个按钮,允许测试人员上传文件以进行测试。 I am using firebase as a database so serializers and models don't come into the picture.我使用 firebase 作为数据库,因此序列化程序和模型不会出现。 I am using only Django's rest framework.我只使用 Django 的 rest 框架。
I have looked at drf-yasg's documentation that suggests using Operation for file upload.我查看了 drf-yasg 的文档,该文档建议使用 Operation 进行文件上传。 But It is a very abstract and obscure documentation.但它是一个非常抽象和晦涩的文档。
Make sure you specify the parser_classes
in your view.确保在视图中指定parser_classes
。 By Default it's JSON parser which doesn't handle file uploads.默认情况下,它是不处理文件上传的 JSON 解析器。 Use either MultiPartParser
or FileUploadParser
使用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
Here is working example from my project这是我的项目中的工作示例
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.