1. 程式人生 > >解決drf_yasg中的SwaggerAPI無法正確分組問題

解決drf_yasg中的SwaggerAPI無法正確分組問題

swagger是後臺開發中很好用的互動式文件,Django原本的Django-Swagger已經停止維護了,現在一般用`drf_yasg`這個包來實現文件,它裡面支援swagger和redoc兩種,redoc是靜態的,作為匯出文件的話不錯,不過一般我們用swagger,因為可以在文件裡面除錯,非常方便。 Drf裡面有個東西是AutoSchema,可以自動掃描ViewSet和APIView這類可以提供介面的地方,和Spring裡面基於註解的文件定義不同,一般在Drf裡不需要手動配置每個介面的名稱和說明,只要寫在pydoc裡面就行,不過這個AutoSchema也不是很準確,他是按照URL,特別是我們這種多級URL的,就會只按照第一級URL分組,所以就會出現下面這種未分組的效果。 ## 未分組效果 ![](https://upload-images.jianshu.io/upload_images/8869373-7bf761f0d705c0d8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## 分組後效果 ![](https://upload-images.jianshu.io/upload_images/8869373-bc4f9479e46c4a9f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## 解決方法 定義一個類,繼承自`SwaggerAutoSchema`,用於自定義配置tags,我們自己決定要用哪一級的URL來做分組tag。 建立檔案,本例是:`config/swagger.py` ```python 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`裡面配置一下: ```python # Swagger 配置 SWAGGER_SETTINGS = { 'DEFAULT_AUTO_SCHEMA_CLASS': 'config.swagger.CustomSwaggerAutoSchema', } ``` 這樣就可以了~ ## 參考資料 - [https://github.com/axnsan12/drf-yasg/issues/489](https://github.com/axnsan12/drf-yasg/issues/489) ## 歡迎交流 我整理了一系列的技術文章和資料,在公眾號「程式設計實驗室」後臺回覆 linux、flutter、c#、netcore、android、kotlin、java、python 等可獲取相關技術文章和資料,同時有任何問題都可以在公眾號後臺