解決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#

相關文章
相關標籤/搜索