解决drf_yasg中的SwaggerAPI没法正确分组问题

swagger是后台开发中很好用的交互式文档,Django本来的Django-Swagger已经中止维护了,如今通常用drf_yasg这个包来实现文档,它里面支持swagger和redoc两种,redoc是静态的,做为导出文档的话不错,不过通常咱们用swagger,由于能够在文档里面调试,很是方便。java

Drf里面有个东西是AutoSchema,能够自动扫描ViewSet和APIView这类能够提供接口的地方,和Spring里面基于注解的文档定义不一样,通常在Drf里不须要手动配置每一个接口的名称和说明,只要写在pydoc里面就行,不过这个AutoSchema也不是很准确,他是按照URL,特别是咱们这种多级URL的,就会只按照第一级URL分组,因此就会出现下面这种未分组的效果。python

未分组效果

分组后效果

解决方法

定义一个类,继承自SwaggerAutoSchema,用于自定义配置tags,咱们本身决定要用哪一级的URL来作分组tag。linux

建立文件,本例是:config/swagger.pyandroid

from drf_yasg.inspectors import SwaggerAutoSchema

class CustomSwaggerAutoSchema(SwaggerAutoSchema):
    def get_tags(self, operation_keys=None):
        tags = super().get_tags(operation_keys)

        if "v1" in tags and operation_keys:
            #  `operation_keys` 内容像这样 ['v1', 'prize_join_log', 'create']
            tags[0] = operation_keys[1]

        return tags

而后咱们在settings里面配置一下:git

# Swagger 配置
SWAGGER_SETTINGS = {
    'DEFAULT_AUTO_SCHEMA_CLASS': 'config.swagger.CustomSwaggerAutoSchema',
}

这样就能够了~github

参考资料

欢迎交流

我整理了一系列的技术文章和资料,在公众号「程序设计实验室」后台回复 linux、flutter、c#、netcore、android、kotlin、java、python 等可获取相关技术文章和资料,同时有任何问题均可以在公众号后台留言~c#

相关文章
相关标签/搜索