我正在学习FastAPI,并了解到使用pydantic进行数据验证是其功能之一.但是在从its tutorial开始阅读它的PUT方法示例后,我有一个问题,如果我只想让PUT主体包含更新的数据(因为URL已经有了它的id),我该怎么做呢?
使用教程中的示例代码作为我的意思的示例,
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
id: str
description: str = "default description"
price: Union[float, None] = None
tax: float = 10.5
tags: list[str] = []
...
@app.put("/items/{item_id}")
#async def update_item(item_id: str, item:Item):
async def update_item(item_id: str, item):
pass
如果我编码async def update_item(item_id: str, item:Item)
,那么主体必须包含id属性,否则我将得到422"field Required".但我觉得这是不必要的,因为URL/items/{item_id}
已经包含了ID,我只希望Body包含更新的数据.
但是当我编写async def update_item(item_id: str, item)
代码时,令我惊讶的是,该项变成了required个查询参数!
正如其文件所示,
那么为什么它会成为查询参数呢?这是我的第二个问题.
我觉得这是错误的,因为我更喜欢只查询GET的参数.