当前位置: 首页 > 工具软件 > API-requestor > 使用案例 >

FastAPI学习-RequestBody请求体

蒋联
2023-12-01

RequestBody参数会有很多情况,最简单的是只有一个数据模型,只需要声明一个BaseModel即可;如果有多个数据模型,或者除了数据模型外还有单个值。

RequestBody参数为多个数据模型

如下,RequestBody会有两个数据模型:Item和User

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None


class User(BaseModel):
    username: str
    full_name: str = None


@app.put("/items/{item_id}")
async def update_item(*, item_id: int, item: Item, user: User):
    results = {"item_id": item_id, "item": item, "user": user}
    return results

相应的数据体会被解析为键值对的值,键名为参数名,同时数据体内的变量也会被进行数据校验,如上会被解析为

{
“item”: {
“name”: “Foo”,
“description”: “The pretender”,
“price”: 42.0,
“tax”: 3.2
},
“user”: {
“username”: “dave”,
“full_name”: “Dave Grohl”
}
}

RequestBody参数为多个数据模型和单个参数

如下,RequestBody会有多个数据模型User、Item和单个参数importance

from fastapi import Body, FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None


class User(BaseModel):
    username: str
    full_name: str = None


@app.put("/items/{item_id}")
async def update_item(
    *, item_id: int, item: Item, user: User, importance: int = Body(...)
):
    results = {"item_id": item_id, "item": item, "user": user, "importance": importance}
    return results

如上会被解析为

{
“item”: {
“name”: “Foo”,
“description”: “The pretender”,
“price”: 42.0,
“tax”: 3.2
},
“user”: {
“username”: “dave”,
“full_name”: “Dave Grohl”
},
“importance”: 5
}

RequestBody参数单个数据模型想被解释为JSON

单个数据模型直接放进参数,默认只会将其数据模型内容传入,如果被作为JSON传入,则可以使用item: Item = Body(…, embed=True)

from fastapi import Body, FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None


@app.put("/items/{item_id}")
async def update_item(*, item_id: int, item: Item = Body(..., embed=True)):
    results = {"item_id": item_id, "item": item}
    return results

如上,可被解释为{
“item”: {
“name”: “Foo”,
“description”: “The pretender”,
“price”: 42.0,
“tax”: 3.2
}
}

参考资料

  1. FastAPI官网 :https://fastapi.tiangolo.com/
  2. FastAPI源码 :https://github.com/tiangolo/fastapi
 类似资料: