简体   繁体   English

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

[英]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使用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

Check out this issue .看看这个问题 You can find how to use @swagger_auto_schema to create something like this您可以找到如何使用@swagger_auto_schema来创建这样的东西

在此处输入图片说明

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.

相关问题 Django rest 框架 drf-yasg swagger ListField 序列化程序的多个文件上传错误 - Django rest framework drf-yasg swagger multiple file upload error for ListField serializer drf-yasg:如何隐藏 Django rest 框架架构? - drf-yasg: How to hide Django rest Framework schema? 验证Swagger API文档(drf-yasg) - Authenticating Swagger API docs (drf-yasg) Django 2.x drf-yasg如何在自定义方法中创建API(如在swagger中) - Django 2.x drf-yasg how to create API in a custom method (like in swagger) Django - drf-yasg 将 @swagger_auto_schema 中的 request_body 设置为 @api_view 上的序列化程序的简化版本 - Django - drf-yasg setting request_body in @swagger_auto_schema to reduced version of serializer on @api_view 如何在 DRF-YASG 中为 DRF 和 DJANGO 消除 swagger-ui 中的 id 路径参数 - How to eliminate id path parameter in swagger-ui in DRF-YASG for DRF and DJANGO 如何使用 drf-yasg Swagger 手动自定义 DRF 视图的参数? - How to manually customize parameters of DRF views using drf-yasg Swagger? 如何在 drf-yasg 中访问 swagger ui 时禁用“django login”超链接? - How to disable "django login" hyperlink while accessing swagger ui in drf-yasg? 定义自定义请求 - Swagger (Drf-yasg) - Defining custom request - Swagger (Drf-yasg) django-rest-framework和swagger api文档 - django-rest-framework and swagger api documentation
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM