zoukankan      html  css  js  c++  java
  • 解决drf_yasg中的SwaggerAPI无法正确分组问题

    swagger是后台开发中很好用的交互式文档,Django原本的Django-Swagger已经停止维护了,现在一般用drf_yasg这个包来实现文档,它里面支持swagger和redoc两种,redoc是静态的,作为导出文档的话不错,不过一般我们用swagger,因为可以在文档里面调试,非常方便。

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

    未分组效果

    分组后效果

    解决方法

    定义一个类,继承自SwaggerAutoSchema,用于自定义配置tags,我们自己决定要用哪一级的URL来做分组tag。

    创建文件,本例是:config/swagger.py

    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里面配置一下:

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

    这样就可以了~

    参考资料

    欢迎交流

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

  • 相关阅读:
    linux 免密登录
    mysql 重置从库
    elasticsearch原理及简介
    多线程编程--心得
    为什么我们做分布式使用Redis?
    JAVA-JVM调优
    JAVA-JVM调优标志
    Spirng-Mvc之Servlet篇
    Agent Job代理 执行SSIS Package
    Python之爬虫的理解
  • 原文地址:https://www.cnblogs.com/deali/p/13454753.html
Copyright © 2011-2022 走看看