当前位置: 首页 > 知识库问答 >
问题:

python - fastapi自带swagger文档如何嵌套展示?

翟理
2023-11-03

swagger展示目标效果

  • 后台管理

    • 用户管理

      • a接口
      • b接口
    • 文章管理

      • c接口
      • d接口

现在效果

  • 后台管理

    • a接口
    • b接口
    • c接口
    • d接口
  • 用户管理

    • a接口
    • b接口
  • 文章管理

    • c接口
    • d接口

代码

routerAdmin = APIRouter(    prefix='/admin',    tags=['后台管理'])# routerUser文件a,b路由routerAdmin.include_router(routerUser)# routerAdmin文件c,d路由routerAdmin.include_router(routerArticle)
app = FastAPI()app.include_router(routerAdmin)

问: 可以实现目标效果吗,如何实现.

共有3个答案

麹培
2023-11-03

FastAPI 集成的swagger不支持嵌套。
不过你可以通过其他工具来实现,之前我用过redoc(https://github.com/Redocly/redoc)来生成API 的文档
可以支持切换swagger,可导出OpenAPI标准格式的文档

沈琨
2023-11-03

目前 OpenAPI 规范不支持嵌套。

2017 年有这个 issue 请求。据开发人员说会实现这个功能,但是目前已经 2023 年了,依然没动静。

貌似有个 插件 能实现:标题1|标题2|标题3。

参考自:stackoverflow。

赫连昕
2023-11-03

可以,您可以通过自定义 Swagger/OpenAPI 文档的生成来实现目标效果。

FastAPI 使用 fastapi_openapi 包来生成 OpenAPI 文档,您可以通过自定义该包来达到目标效果。

首先,您需要安装 fastapi_openapi3 包,而不是默认的 fastapi_openapi。这可以通过以下命令完成:

pip install fastapi_openapi3

然后,您需要创建一个新的文件,例如 openapi.yaml,并定义您的 OpenAPI 文档。这将需要包括您想要显示的自定义标签和路由。然后,您可以创建一个 TagObject 对象,该对象将用于定义标签。在您的 TagObject 中,您可以添加一个 children 属性,该属性将包含您的子标签和路由。

例如:

from fastapi import FastAPI, Depends, HTTPException, status, Tag, Security, Formfrom fastapi_openapi import FastAPIOpenAPIfrom fastapi_openapi.auto_tag import AutoTagapp = FastAPI()openapi = FastAPIOpenAPI(title="Your App", version="0.1.0", openapi_version="3.0.2")openapi.add_tag(name="后台管理", description="后台管理相关接口", children=[    AutoTag(name="用户管理", description="用户管理相关接口", children=[        routerUser,  # 注意:这里应该是你的用户管理路由    ]),    AutoTag(name="文章管理", description="文章管理相关接口", children=[        routerArticle,  # 注意:这里应该是你的文章管理路由    ]),])

最后,您需要在您的应用中包含 openapi

app.include_router(openapi)

然后,您的 Swagger/OpenAPI 文档应该显示您期望的嵌套标签和路由。注意,上述代码只是一个基本的例子,您可能需要根据自己的路由设置进行一些调整。

 类似资料:
  • 我想将图像添加到FastAPI自动留档(由Swagger UI提供),但我不知道如何做到这一点。这是代码: 正如您从代码中看到的那样,我正在尝试使用 URL 执行此操作,我在 ReDoc 和 Swagger UI 中得到的只是作为文本的 URL,而不是实际图像。另外,我想使用存储在本地驱动器中的图像。 我如何才能做到这一点? 先谢谢你。

  • 默认只有 200 和 422 如果我还想一起声明 200、201、401、404、500 等等多个状态码怎么写?

  • 我们有个人课。Person类具有类型为PersonDetail的属性。Persondeail有一个类型为Mail类的属性。 当我们启动应用程序并导航到swagger ui html页面时,邮件类不会在openapi定义的组件部分生成,我们会在页面上出现“无法解析引用:无法解析指针:文档中不存在 /components/schemas/Mail”错误。正如我们检查的,如果有一个复杂的类型在第三级,时

  • 多亏了这里的人的帮助,我成功地在我的文档中找到了两个ID,并在另一个集合中找到了他们的代表文档。我需要采取的下一步是进一步查找一个“嵌套”ID(引用另一个集合中的文档)。 其结果如下: 我希望chieftain部分是这样的(这就是没有添加'last'$lookup'的chieftain文档的样子):

  • 将mongodb与pymongo一起使用,我有以下文档: 我想更新示例子文档(这是一个数组元素,因为可能有多个示例)。我有以下代码,但它不工作... 谁能告诉我这个有什么问题吗?

  • 我有我的API文件与大摇大摆。为了方便开发人员,我想在我的网站上提供的招摇过市的图形用户界面以及。但是,我的提供商尚未安装php yaml扩展。这意味着我不能在自己的网站上使用GUI。 所以,我想使用第三方GUI。我知道我可以使用https://petstore.swagger.io/,并在文本框中输入到我的yaml文件的链接。这也不是真正的用户友好。我更喜欢在调用url时打开GUI并指定yaml