随笔 - 214  文章 - 12  评论 - 40  阅读 - 38万

FastAPI 基础学习(六) Request Body(I)

作者:麦克煎蛋   出处:https://www.cnblogs.com/mazhiyong/ 转载请保留这段声明,谢谢!

 

Request Body是从客户端发送到API端的数据内容。

一、单个Request Body

通过以下几个简单环节我们就可以完成对Request Body的处理。

1、导入Pydantic BaseModel

from pydantic import BaseModel

2、创建数据模型

声明需要的数据模型,并且继承自BaseModel。

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

模型属性均基于标准的Python类型。

注意,与请求参数类似,如果模型属性有缺省值,那么就意味着它不是必须的,如果缺省值是None,则意味着是可选的;否则,它就是必须的。

3、参数声明

我们用声明路径参数和请求参数同样的方式来声明Request Body参数。

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

 

通过以上的几个环节,FastAPI就实现了以下功能:

(1)、从Request中解析出Body内容,并且输出格式为JSON。

(2)、如果需要,进行相应的数据类型转换。

(3)、校验数据,如果校验失败则返回详细错误信息。

(4)、通过声明的参数对象来接收最终数据内容。

4、使用数据模型

你可以直接访问数据模型的所有属性。

复制代码
from fastapi import FastAPI
from pydantic import BaseModel


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


app = FastAPI()


@app.post("/items/")
async def create_item(item: Item):
    item_dict = item.dict()
    if item.tax:
        price_with_tax = item.price + item.tax
        item_dict.update({"price_with_tax": price_with_tax})
    return item_dict
复制代码

实际运行示例如下:

5、同时使用Request Body参数、路径参数、请求参数

你可以同时声明Request Body参数、路径参数、请求参数这几种不同类型的参数。

FastAPI会自动识别不同类型的参数,并且赋予参数对象正确的数据内容。

复制代码
from fastapi import FastAPI
from pydantic import BaseModel


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


app = FastAPI()


@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item, q: str = None):
    result = {"item_id": item_id, **item.dict()}
    if q:
        result.update({"q": q})
    return result
复制代码

 

函数参数按照如下的顺序进行识别匹配:

(1)、如果这个参数已经在路径中被声明过,那么它就是一个路径参数。

(2)、如果这个参数的类型是单类型的(如str、float、int、bool等),那么它就是一个请求参数。

(3)、如果这个参数的类型是Pydantic数据模型,那么它就被认为是Request Body参数。

 

posted on   麦克煎蛋  阅读(4049)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示