前言
- 上一篇有讲到将参数类型指定为 Pydantic Model,这样 FastAPI 会解析它为一个 Request Body
- 那单类型(int、float、str、bool...)参数可以成为 Request Body 的一部分吗?答案是可以的
- 通过 Body 函数即可完成,和 Path、Query 有异曲同工之妙
文章跳转
Body
- 主要作用:可以将单类型的参数成为 Request Body 的一部分,即从查询参数变成请求体参数
- 和 Query、Path 提供的额外校验、元数据是基本一致的(多了个 embed 参数,最后讲解)
Body 的简单栗子
from typing import Optional import uvicorn from fastapi import Body, FastAPI from pydantic import BaseModel app = FastAPI() class Item(BaseModel): name: str description: Optional[str] = None price: float tax: Optional[float] = None class User(BaseModel): username: str full_name: Optional[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 if __name__ == "__main__": uvicorn.run(app="8_Body:app", host="127.0.0.1", port=8080, reload=True, debug=True)
期望得到的 Request Body
{ "item": { "name": "Foo", "description": "The pretender", "price": 42.0, "tax": 3.2 }, "user": { "username": "dave", "full_name": "Dave Grohl" }, "importance": 5 }
Request Body 中多了个 importance
正确传参的请求结果
查看 Swagger API 文档