[英]Dynamical body in FastApi using Pydantic
我想在 FastApi 上有一个动态的强制主体。
我解释 :
from fastapi import FastAPI, Body
from pydantic import BaseModel
app = FastAPI()
class Parameters(BaseModel):
platform: str
country: str
@app.put("/myroute")
async def provision_instance(*, parameters: Parameters = Body(...)):
do_something
if __name__ == '__main__':
uvicorn.run(app, host="0.0.0.0", port=80)
在这里,我的身体是在参数类中手动定义的,具有两个属性,平台和国家。 以后这些属性会来自一个配置文件,而且会有两个以上的属性。 所以我需要即时自动创建它们。
例如,在配置文件中,我可以有:
---
parameters:
application:
description: "Name of the application"
type: string
platform:
description: "Name of the platform"
type: string
country:
description: "Name of the country"
type: string
在这种情况下,我怎么能在正文中拥有可变数量的参数? 我应该找到一种方法来为我的 Parameters 类提供可变数量的属性吗?
Pydantic 模型可以按照文档的这一部分中的描述动态构建。 您仍然需要实现一个函数来读取您的 yaml 文件并从中构建 Pydantic 模型。
现在考虑一个 python 文件中的一些 Pydantic 模型; 这不等同于拥有一个描述模型的 yaml 文件吗?
如果您想出这个动态构建 Pydantic 模型的计划,因为您将有多种形状的数据进入,您还可以探索使用typing.Union
来定义您的端点:
class Parameters1(BaseModel):
platform: str
country: str
class Parameters2(BaseModel):
application: str
country: str
@app.put("/myroute")
async def provision_instance(*, parameters: Union[Parameters1, Parameters2] = Body(...)):
if isinstance(parameters, Parameters1):
pass # TODO
elif isinstance(parameters, Parameters2):
pass # TODO
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.