FastAPI 学习之路(四)使用pydantic模型做请求体
FastAPI 学习之路(十三)Cookie 参数,Header参数
前言
我们之前分享一些配置,这次分享一下请求体去更新数据。
正文
我们都知道,去创建请求体,更新数据我们用PUT请求,我们去试着更新下数据。
我们有一组数据,我们要更新描述。
from typing import List, Optional
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: Optional[str] = None
description: Optional[str] = None
price: Optional[float] = None
tax: float = 10.5
tags: List[str] = []
items = {
"one": {"name": "苹果", "price": 50.2}
}
@app.put("/items/", response_model=Item)
def update_item(name: str, item: Item):
update_item_encoded = jsonable_encoder(item)
items[name] = update_item_encoded
return update_item_encoded
@app.get("/items/{item_id}", response_model=Item)
def read_item(item_id: str):
return items[item_id]
我们去获取下
我们去更新下数据
我们去更新一个不存在的数据
更新部分数据时,可以在 Pydantic 模型的 .dict() 中使用 exclude_unset 参数。
比如,item.dict(exclude_unset=True)。我们去看我们实际的例子
from typing import List, Optional
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: Optional[str] = None
description: Optional[str] = None
price: Optional[float] = None
tax: float = 10.5
tags: List[str] = []
items = {
"one": {"name": "苹果", "price": 50.2}
}
@app.put("/items/", response_model=Item)
def update_item(name: str, item: Item):
stored_item_data = items[name]
stored_item_model = Item(**stored_item_data)
update_data = item.dict(exclude_unset=True)
updated_item = stored_item_model.copy(update=update_data)
items[name] = jsonable_encoder(updated_item)
return updated_item
@app.get("/items/{item_id}", response_model=Item)
def read_item(item_id: str):
return items[item_id]
我们去看下去后的效果
简而言之,更新部分数据做法:
后记
发现问题,解决问题。遇到问题,慢慢解决问题即可。
欢迎关注雷子说测试开发,后续将会持续为大家分享更多的技术知识
如果你有问题可以留言或者加我微信:952943386。2021,一起牛转钱坤,一起牛逼。
如果觉得这篇文章还不错,来个【分享、点赞、在看】三连吧,让更多的人也看到~