ale*_*ull 8 python pydantic fastapi
有没有办法让 FastAPI 应用程序不在其架构文档中显示模型?我有一些模型与其他模型略有不同,并且每个模型都发生重复,因此模式文档非常混乱。
from pydantic import BaseModel
class A(BaseModel):
name: str
class HasID(BaseModel):
id_: int
class AWithID(A, HasID):
pass
Run Code Online (Sandbox Code Playgroud)
有没有办法不在AWithID文档中显示类?
它并不优雅,但您可以手动修改自动生成的 OpenAPI 架构。
请参阅FastAPI 文档的扩展 OpenAPI部分。
应用程序
FastAPI(实例)有一个.openapi()预期返回 OpenAPI 架构的方法。
/openapi.json作为应用程序对象创建的一部分,将注册(或您设置的 openapi_url 的任何内容)的路径操作 。它只是返回一个 JSON 响应以及应用程序方法的结果
.openapi()。默认情况下,该方法的
.openapi()作用是检查属性.openapi_schema以查看它是否有内容并返回它们。如果没有,它会使用 处的实用函数生成它们
fastapi.openapi.utils.get_openapi。
从 的输出来看get_openapi(),所有模型都在components>下定义schemas,其中每个模型的名称是字典键。
{
"openapi": "3.0.2",
"info": {...},
"paths": {...},
"components": {
"schemas": {
"A": {
"title": "A",
"required": [...],
"type": "object",
"properties": {...}
},
"AWithID": {
"title": "AWithID",
"required": [...],
"type": "object",
"properties": {...}
},
"HasID": {
"title": "HasID",
"required": [...],
"type": "object",
"properties": {...}
},
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以pop关闭要隐藏的模型:
from fastapi import FastAPI
from fastapi.openapi.utils import get_openapi
app = FastAPI()
# Define routes before customizing the OpenAPI schema
# ...
def custom_openapi():
if app.openapi_schema:
return app.openapi_schema
openapi_schema = get_openapi(title="My App", version="1.0.0", routes=app.routes)
openapi_schema["components"]["schemas"].pop("AWithID", None)
app.openapi_schema = openapi_schema
return app.openapi_schema
app.openapi = custom_openapi
Run Code Online (Sandbox Code Playgroud)