为响应模式 fastapi 构建 Pydantic 模式
constructing Pydantic schema for response modal fastapi
我有这样的数据响应
{
"k9KNg_id": {
"card_name": "item1",
"price_updated_date": "2022-04-07T19:30:25.78Z",
"card_img_id": "https://testingimg",
"set_name": "some testing set",
"set_tag": "mm3",
"rarity": "rare",
"price_normal": 32.99,
"price_foil": 54.99
},
"EWrZ5_id": {
"item_name": "item2",
"price_updated_date": "2022-04-07T08:05:52.385Z",
"item_name_img_id": "https://testingimg",
"set_name": "testing set",
"set_tag": "exp",
"rarity": "super rare",
"price_normal": null,
"price_foil": 379.99
},
所以现在我正在尝试用 fastapi 和基本模型模式编写这个 api return。我应该如何编写架构?因为我有我的商品 ID,然后是我的商品详细信息。
item_dict.update({
"item_name": abc["item"]["name"],
"price_updated_date": ed["prices"]["lastUpdatedAtUtc"],
"item_img_id": item_img_url,
"set_name": ed["name"],
"set_tag": ed["abbreviation"],
"rarity": ed["rarity"],
"price_normal": normal_price,
"price_foil": foil_price
})
data_return[ed["card_id"]] = ckd_dict
return data_return
在我的 api 呼叫中,我只是发送了一个非常简单的快速 api 呼叫
@router.get("/{item_name}")
async def search(item_name):
item = get_item(item_url, item_url_type, item_name)
return item
我想为我的快速 api 到 return 数据创建一个 response_model 但我不确定如何使用这种数据结构构建我的模式
首先将列表(字典)响应与卡片结构分开:
class Card(BaseModel):
card_name: str
price_updated_date: datetime.datetime,
card_img_id: str
set_name: str
set_tag: str
rarity: str
price_normal: float # or maybe better, decimal.Decimal - depends on your use case.
price_foil: float # same
然后您可以直接在 search
装饰器中使用它,并说您 return 一本纸牌字典:
@router.get("/{item_name}", response_model=Dict[str, Card])
async def search(item_name):
pass
但是,您应该可以使用 __root__
来定义 root level dictionary response:
class CardListResponse(BaseModel):
__root__: Dict[str, Card]
@router.get("/{item_name}", response_model=CardListResponse)
async def search(item_name):
pass
我有这样的数据响应
{
"k9KNg_id": {
"card_name": "item1",
"price_updated_date": "2022-04-07T19:30:25.78Z",
"card_img_id": "https://testingimg",
"set_name": "some testing set",
"set_tag": "mm3",
"rarity": "rare",
"price_normal": 32.99,
"price_foil": 54.99
},
"EWrZ5_id": {
"item_name": "item2",
"price_updated_date": "2022-04-07T08:05:52.385Z",
"item_name_img_id": "https://testingimg",
"set_name": "testing set",
"set_tag": "exp",
"rarity": "super rare",
"price_normal": null,
"price_foil": 379.99
},
所以现在我正在尝试用 fastapi 和基本模型模式编写这个 api return。我应该如何编写架构?因为我有我的商品 ID,然后是我的商品详细信息。
item_dict.update({
"item_name": abc["item"]["name"],
"price_updated_date": ed["prices"]["lastUpdatedAtUtc"],
"item_img_id": item_img_url,
"set_name": ed["name"],
"set_tag": ed["abbreviation"],
"rarity": ed["rarity"],
"price_normal": normal_price,
"price_foil": foil_price
})
data_return[ed["card_id"]] = ckd_dict
return data_return
在我的 api 呼叫中,我只是发送了一个非常简单的快速 api 呼叫
@router.get("/{item_name}")
async def search(item_name):
item = get_item(item_url, item_url_type, item_name)
return item
我想为我的快速 api 到 return 数据创建一个 response_model 但我不确定如何使用这种数据结构构建我的模式
首先将列表(字典)响应与卡片结构分开:
class Card(BaseModel):
card_name: str
price_updated_date: datetime.datetime,
card_img_id: str
set_name: str
set_tag: str
rarity: str
price_normal: float # or maybe better, decimal.Decimal - depends on your use case.
price_foil: float # same
然后您可以直接在 search
装饰器中使用它,并说您 return 一本纸牌字典:
@router.get("/{item_name}", response_model=Dict[str, Card])
async def search(item_name):
pass
但是,您应该可以使用 __root__
来定义 root level dictionary response:
class CardListResponse(BaseModel):
__root__: Dict[str, Card]
@router.get("/{item_name}", response_model=CardListResponse)
async def search(item_name):
pass