前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >FastAPI(9)- 多个 Request Body

FastAPI(9)- 多个 Request Body

作者头像
小菠萝测试笔记
发布2021-09-27 15:45:57
发布2021-09-27 15:45:57
93500
代码可运行
举报
运行总次数:0
代码可运行

Path、Query、Request Body 混合使用

代码语言:javascript
代码运行次数:0
运行
复制
from fastapi import FastAPI, Path, Query
from typing import Optional
from pydantic import BaseModel
import uvicorn

app = FastAPI()


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


@app.put("/items/{item_id}")
async def update_item(
        *,
        item_id: int = Path(default=..., description="item_id", gt=1, lt=20, example=2),
        name: Optional[str] = Query(default=None, description="查询参数", min_length=0, max_length=20, example="示例值"),
        item: Optional[Item] = None
):
    results = {"item_id": item_id}
    if name:
        results.update({"name": name})
    if item:
        results.update({"item": item})
    return results


if __name__ == "__main__":
    uvicorn.run(app="7_multiple_parameters:app", host="127.0.0.1", port=8080, reload=True, debug=True)

除了路径参数 item_id 是必传的,查询参数 name 和请求体 item 都是可选非必传

只传路径参数的请求结果
路径参数、查询参数、请求体均传递的请求结果
查看 Swagger API 文档

多个 Request Body

代码语言:javascript
代码运行次数:0
运行
复制
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

# 自定义模型类 1
class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None


# 自定义模型类 2
class User(BaseModel):
    username: str
    full_name: Optional[str] = None


@app.put("/items/{item_id}")
async def update_item(item_id: int,
                      item: Item,  # 指定第一个 Model 类型
                      user: User):  # 指定第二个 Model 类型
    results = {
        "item_id": item_id,
        "item": item,
        "user": user
    }
    return results 
  • 这种情况下,FastAPI 会注意到函数中有两个 Request Body,因为这 item、user 两个参数都指定了 Pydantic 模型
  • FastAPi 将使用参数名作为 Request Body 中的键(字段名称)
期望得到的 Request Body
代码语言:javascript
代码运行次数:0
运行
复制
{
    "item": {
        "name": "Foo",
        "description": "The pretender",
        "price": 42.0,
        "tax": 3.2
    },
    "user": {
        "username": "dave",
        "full_name": "Dave Grohl"
    }
}
正确传参的请求结果
查看 Swagger API 文档
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Path、Query、Request Body 混合使用
    • 只传路径参数的请求结果
    • 路径参数、查询参数、请求体均传递的请求结果
    • 查看 Swagger API 文档
  • 多个 Request Body
    • 期望得到的 Request Body
    • 正确传参的请求结果
    • 查看 Swagger API 文档
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档