动态请求体
诉求:当我们想要动态的向请求体中增加一个字段,但是不想修改原有的请求体数据模型,怎么办呢?
答案是:使用动态请求体
Body
实例
原有数据模型
class Mds(BaseModel):
name: str
age: int = 18
home: str
height: Optional[str]
class Mm(BaseModel):
title: str
phone: str = 'huawei'
复制代码
原有的视图函数
@app.put('/models/{name}')
async def add_model(Mds:Mds,Mm:Mm,name:str,q: Optional[bool] = False):
ret = {}
if q:
ret.update({"request_name":name})
if Mds.name:
ret.update({"Name":Mds.name})
if Mds.height:
ret.update({"height":Mds.height})
if Mm.title:
ret.update({"Title":Mm.title})
return ret
复制代码
向请求体增加一个字段
此时,我们需要修改视图函数即可。
from fastapi import Body
@app.put('/models/{name}')
async def add_model(Mds:Mds,Mm:Mm,name:str,q: Optional[bool] = False,weight:str=Body(...)):
ret = {}
if q:
ret.update({"request_name":name})
if Mds.name:
ret.update({"Name":Mds.name})
if Mds.height:
ret.update({"height":Mds.height})
if Mm.title:
ret.update({"Title":Mm.title})
return ret
复制代码
接口测试
如上图,我们已经成功实现动态增加请求体字段
注意
当请求体为单个模型时,动态字段和请求模型原字段同级。当请求体为多个模型时,动态字段和请求模型类名同级。
单个数据模型时的请求体
{
"Mds": {
"name": "phyger",
"home": "xian",
"ok": "ok",
"weight": "70kg"
}
}
复制代码
多个数据模型时的请求体
{
"Mds": {
"name": "phyger",
"home": "xian",
"ok": "ok"
},
"Mm": {
"title": "TSE",
"phone": "xiaomi"
},
"weight": "70kg"
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END