# /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", # 自定义 JS
swagger_css_url="/static/swagger-ui/swagger-ui.css", # 自定义 CSS
swagger_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 的官方仓库下载。