参见 fastapi/applycations.py 中的setup. /docs 把所有的路径routes 都包含进去了。参考实现根据tag 实现文档生成。
要先生成docs 需要的openapi_url。(其中get_openapi 是fastapi.openapi.utils 内部的函数)
@app.get("/api/docs/{tag}/openapi.json",include_in_schema=False) async def docs_tag(tag:str) -> JSONResponse: openapi_schema = get_openapi( title=app.title, version=app.version, openapi_version=app.openapi_version, description=app.description, routes=[router for router in app.routes if tag in getattr(router,"tags",[]) ], tags=app.openapi_tags, servers=app.servers, ) return JSONResponse(openapi_schema)
再定义tag 的前端页面部分:
@app.get("/docs/{tag}",include_in_schema=False) async def get_documentation_tag_api(tag:str): return get_swagger_ui_html(openapi_url=f"/api/docs/{tag}/openapi.json", title="docs")
原文:https://www.cnblogs.com/xunhanliu/p/14950735.html