fastapi 使用本地资源自定义swagger文档
# /docs - Swagger UI 交互式文档
@app.get("/docs", include_in_schema=False)
async def custom_swagger_ui_html():return get_swagger_ui_html(openapi_url=app.openapi_url, # 指向 OpenAPI JSON 规范title=app.title + " - Swagger UI", # 页面标题oauth2_redirect_url=app.swagger_ui_oauth2_redirect_url, # OAuth2 回调swagger_js_url="/static/swagger-ui/swagger-ui-bundle.js", # 自定义 JSswagger_css_url="/static/swagger-ui/swagger-ui.css", # 自定义 CSSswagger_favicon_url="/static/swagger-ui/favicon.png", # 自定义图标)
# OAuth2 重定向端点
# 作用:处理 OAuth2 认证的回调 完成 Swagger UI 的认证流程
@app.get(app.swagger_ui_oauth2_redirect_url, include_in_schema=False)
async def swagger_ui_redirect():return get_swagger_ui_oauth2_redirect_html()# /redoc - ReDoc 文档 适合阅读
@app.get("/redoc", include_in_schema=False)
async def redoc_html():return get_redoc_html(openapi_url=app.openapi_url,title=app.title + " - ReDoc",redoc_js_url="/static/redoc/redoc.standalone.js",redoc_favicon_url="/static/redoc/favicon.png",with_google_fonts=False # 禁用 Google 字体(国内访问友好))
include_in_schema=False
的重要性
这个参数表示这些端点不会出现在 API 文档本身中,如果没有这个参数,会出现递归引用的问题。
你需要在 static
目录下放置相应的文件:
static/
├── swagger-ui/
│ ├── swagger-ui-bundle.js
│ ├── swagger-ui.css
│ └── favicon.png
└── redoc/├── redoc.standalone.js└── favicon.png
这些文件可以从 Swagger UI 和 ReDoc 的官方仓库下载。