如何将路径参数传递给Pydantic模型?

4

有没有某种方法可以做到以下内容?

from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel


class Item(BaseModel):
    id: str
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None


app = FastAPI()


@app.post("/items/{item_id}")
async def create_item(item: Item):
    return item

我希望在Item模型中获得item_id路径参数的值。

是否可能?

3个回答

2

在FastAPI中,可以使用Pydantic定义数据模型。您可以按照以下方式操作:

from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel


class Item(BaseModel):
    id: Optional[str] = None
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None


app = FastAPI()


@app.post("/items/{item_id}")
async def create_item(item_id, item: Item):
    item.id = item_id
    return item

请注意,id被声明为可选项,以避免在请求的主体参数中出现验证问题。实际上,您不会将id传递给主体,而是传递给路径。
如果需要,您还可以将请求模型与响应模型解耦(请参见此处)。这取决于您的需求。

1

我不知道这是否还相关,或者这个解决方案有多安全,但你可以这样做:

@app.post("/items/{item.id}")
async def create_item(item: Item):
    return item

0
  1. 将您的 id: str 替换为 id: Optional [str] = None

  2. 将您的 create_item (item: Item) 替换为 create_item (item_id, item: Item):

  3. 在您的 async 下添加 item.id = item_id。然后您可以留下 return item


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接