【问题标题】:How to document function-based views parameters?如何记录基于函数的视图参数?
【发布时间】:2018-04-25 13:21:10
【问题描述】:

我正在使用 Django 1.11 和 Django REST Framework 3.7 开发一个 REST API。我安装了Django REST Swagger 2.1 来生成文档。

我正在使用这样的基于函数的视图:

from rest_framework.decorators import api_view, permission_classes

@api_view(['POST'])
@permission_classes((permissions.AllowAny,))
def jwt_auth(request, provider, format=None):
    """
    View description here
    """
    pass

如您所见,我的视图已被 Swagger 识别,并且具有正确的描述:“在此处查看描述”。

但是:

  • 您可以看到provider URL 参数的“描述”列是空的。
  • 没有记录 POST 参数(显然,因为 Swagger 无法知道它们)

如何为基于函数的视图的 URL 和 POST 参数以及响应编写文档?

我试过YAML Docstrings,但它似乎适用于旧版本(0.3.x),它不适用于版本 2.x。

【问题讨论】:

    标签: django python-3.x django-rest-framework swagger django-swagger


    【解决方案1】:

    您可以使用 DjangoRestFrameWork 的 Schema。 http://www.django-rest-framework.org/api-guide/schemas/

    在你的情况下,你可以尝试以下方法。


    from rest_framework.decorators import api_view, permission_classes, schema
    from rest_framework import permissions
    
    @api_view(['POST'])
    @permission_classes((permissions.AllowAny,))
    @schema(custom_schema)
    def jwt_auth(request, provider, format=None):
        """
        View description here
        """
        pass
    

    自定义架构定义

    import coreapi, coreschema
    from rest_framework.schemas import AutoSchema, ManualSchema
    
    custom_schema = AutoSchema(manual_fields=[
        coreapi.Field("username", required=True, location="form", type="string", description="username here"),
        coreapi.Field("password", required=True, location="form", type="string", description="password field")
    ])
    

    应该做的伎俩。 有关更多详细信息,请访问我在顶部提供的链接。基本的 POST 和 GET 参数应该以这种方式工作。

    【讨论】:

      【解决方案2】:

      按照github issue,您所说的基于方法的视图似乎是不可能的。

      但我认为this link可以帮助你。

      【讨论】:

        【解决方案3】:

        使用下面的代码

        @swagger_auto_schema(method='post', auto_schema=None)
        @api_view(['POST'])
        @permission_classes((permissions.AllowAny,))
        def jwt_auth(request, provider, format=None):
            """
            View description here
            """
            pass
        

        【讨论】:

          【解决方案4】:

          我已经解释了这个问题的答案。请点击此 StackOverflow 链接:https://stackoverflow.com/a/67688437/8484740

          【讨论】:

            猜你喜欢
            • 2013-01-25
            • 1970-01-01
            • 2014-08-07
            • 1970-01-01
            • 2014-02-16
            • 2021-01-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多