我有一个非常复杂的 pydantic 模型,其中有很多嵌套的 pydantic 模型。我想确保某些字段永远不会作为 API 调用的一部分返回,但我希望这些字段用于内部逻辑。
我首先尝试使用 pydantic 的Field
函数来指定exclude
我不想返回的字段上的标志。这有效,但是我的内部逻辑中的函数每当.dict()
通过调用.dict(exclude=None)
.
相反,我return_in_api
在 上指定了一个自定义标志Field
,目标是仅在 FastAPI 调用时应用排除.dict()
。我尝试编写一个中间件来根据包含的嵌套字段来调用.dict()
和传递我自己的属性。然而,FastAPI 的中间件为我提供了一个响应流,我不想过早地解析它。exclude
return_in_api=False
相反,我编写了一个装饰器,它.dict()
使用适当的值调用路由处理程序的返回值exclude
。
一个挑战是,每当添加新端点时,添加它们的人都必须记住包含此装饰器,否则字段会泄漏。
理想情况下,我想将此装饰器应用于每个路由,但通过中间件执行此操作似乎会破坏响应流。