微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 drf_yasg 对 swagger API 端点基于函数的视图进行分组 - Django

如何解决如何使用 drf_yasg 对 swagger API 端点基于函数的视图进行分组 - Django

我正在从 Django 1.11 --> 3.1.5 做一些迁移工作

以前使用“rest_framework_swagger”,我可以通过在 url.py 中完成 swagger api 分组

url(r'^api/v9/test_token1$',api.test_token,name='test_token'),url(r'^api/v9/test_token2$',

并得到这个(注意它对 v9 分组)

enter image description here

但是,我在 Django 3.1.5 上尝试过“drf_yasg” 网址.py

path('/v2/token_api1',token_api1,name='token_api1'),path('/v2/token_api2',token_api2,name='token_api2'),

我的 api 定义(请注意我使用的是 @api_view)

token = openapi.Parameter('token',openapi.IN_FORM,type=openapi.TYPE_STRING,required=True)
@swagger_auto_schema(
    method="post",manual_parameters=[token],operation_id="token_api1"
)
@api_view(['POST'])
# this is optional and insures that the view gets formdata
@parser_classes([FormParser])
def token_api1(request):
    token = request.POST['token']    
    return Response("success test_api:" + token,status=status.HTTP_200_OK)


token = openapi.Parameter('token',operation_id="token_api2"
)
@api_view(['POST'])
# this is optional and insures that the view gets formdata
@parser_classes([FormParser])
def token_api2(request):
    token = request.POST['token']
    return Response("success test_api:" + token,status=status.HTTP_200_OK)   

但是,我明白了(注意到 v2 没有分组)。而且当我做测试时,也有错误。 (代码 404 错误:未找到)

enter image description here

如何将这些分组到 drf_yasg 中的 API 并确保没有错误? 注意如果url.py是这样的,没有错误但是没有分组

path('token_api1',path('token_api2',

解决方法

name 用于从您的 Django / Python 代码访问端点。所以我相信新版本的 Django 禁止重名。

您可以通过在 tags 下为端点提供相同的标签来对端点进行分组。像这样:

@swagger_auto_schema(tags=["my_custom_tag"],auto_schema=NoPagingAutoSchema,filter_inspectors=[DjangoFilterDescriptionInspector])
@action(detail=False,methods=['get'])
def action1(self,request):
    pass


@swagger_auto_schema(tags=["my_custom_tag"],method='delete',manual_parameters=[openapi.Parameter(
    name='delete_form_param',in_=openapi.IN_FORM,type=openapi.TYPE_INTEGER,description="this should not crash (form parameter on DELETE method)"
)])
@action(detail=True,methods=['delete'])
def action2(self,request,slug=None):
    pass

请注意,您还可以为每个函数提供多个标签,因此它们将显示在几个不同的类别(或组)中。

结果:

enter image description here

,

只需使用此 @swagger_auto_schema(tags=['tag_name']) 装饰您的视图 swagger_auto_schema 可以用 from drf_yasg.utils import swagger_auto_schema

导入

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。