FastAPI系列(07):请求体数据

news/2026/1/25 16:27:57/文章来源:https://www.cnblogs.com/uncleyong/p/19478329

 

本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/19503695

官网

https://fastapi.tiangolo.com/tutorial/body/

下面用到的是pydantic模块

from pydantic import BaseModel, Field, field_validator

 

请求体数据

定义

参数类型为继承 Pydantic 模块的`BaseModel`类的数据模型类,则它将被解释为请求体参数。

和声明查询参数时一样,当一个模型属性具有默认值时,它不是必需的。否则它是一个必需属性。将默认值设为 None 可使其成为可选属性。

FastAPI 会自动将定义的模型类转化为JSON Schema,Schema 成为 OpenAPI 生成模式的一部分,并显示在 API 交互文档中,查看 API 交互文档如下,该接口将接收application/json类型的参数。

 

示例

from fastapi import FastAPI
import uvicorn
from typing import List
from pydantic import BaseModel
from datetime import dateapp = FastAPI()class User(BaseModel):name: strage: intbirth: datefriends: List[int]@app.post("/user")
def create_user(user:User):  # 形参名可以随意,但是类型必须是Userprint(user)print(type(user))print(user.name)print(user.model_dump())  # 对象转换为字典return user  # 直接返回对象,会自动被序列化为json字符串if __name__ == '__main__':uvicorn.run("request_body:app", port=8002, reload=True)

 

接口文档

image

 

请求数据

image

 

直接返回对象,会自动被序列化为json字符串

image

 

控制台输出内容:

image

 

添加默认值

from fastapi import FastAPI
import uvicorn
from typing import List
from pydantic import BaseModel,Field
from datetime import dateapp = FastAPI()class User(BaseModel):name: str= "韧"age: int = 18birth: date | None = Nonefriends: List[int] = []@app.post("/user")
def create_user(user:User):  # 形参名可以随意,但是类型必须是Userreturn user  # 直接返回对象,会自动被序列化为json字符串if __name__ == '__main__':uvicorn.run("request_body:app", port=8001, reload=True)

  

访问接口文档

image

 接口文档

image

 

请求数据

image

 

响应结果

image

 

属性没有给默认值的是必填

name没有默认值

class User(BaseModel):name: strage: int = 18birth: date | None = Nonefriends: List[int] = []

 

接口文档

image

 

请求数据,不传name

image

 

响应报错

image

 

添加约束

数字约束

from fastapi import FastAPI
import uvicorn
from typing import List
from pydantic import BaseModel,Field
from datetime import dateapp = FastAPI()class User(BaseModel):name: str = "韧"age: int = Field(default=18,gt=0,lt=120,title="年龄",description="年龄0-120")birth: date | None = Nonefriends: List[int] = []@app.post("/user")
def create_user(user:User):  # 形参名可以随意,但是类型必须是Userreturn user  # 直接返回对象,会自动被序列化为json字符串if __name__ == '__main__':uvicorn.run("request_body:app", port=8001, reload=True)

 

请求数据,age不符合要求

image

 

响应报错

image

 

 字符串约束

name: str = Field(pattern="^a")  # name必须a开头

  

接口文档,以及默认填入了a

image

 

请求参数

image

 

错误响应

image

 

name: str = Field(pattern="^[A-Z][A-Za-z0-9]{4,6}$",title="用户名",description="大写字母开头,用户名4-6位")

  

接口文档,name自动生成符合规则的

image

 

定义方法校验

类中也可以写一个方法来对某个属性做校验,这样很灵活
from fastapi import FastAPI
import uvicorn
from typing import List
from pydantic import BaseModel, Field, field_validator
from datetime import dateapp = FastAPI()class User(BaseModel):# name: str = Field(pattern="^[A-Z][A-Za-z0-9]{4,6}$",title="用户名",description="大写字母开头,用户名4-6位")# name: str = Field(pattern="^a")  # name必须a开头name : strage: int = Field(default=18,gt=0,lt=120,title="年龄",description="年龄0-120")birth: date | None = Nonefriends: List[int] = []@field_validator('name')@classmethoddef name_must_alpha(cls, v):assert v.isalpha(), 'name must be alpha'  # 如果未false,会抛出后面的错误信息name must be alphaif len(v) < 3 or len(v) > 5:raise ValueError('用户名长度不能小于3大于5')return v@app.post("/user")
def create_user(user:User):  # 形参名可以随意,但是类型必须是Userreturn user  # 直接返回对象,会自动被序列化为json字符串if __name__ == '__main__':uvicorn.run("request_body:app", port=8001, reload=True)

  

说明:如果不加@classmethod会报错,pydantic.errors.PydanticUserError: `@field_validator` cannot be applied to instance methods

  1. @field_validator 是 Pydantic(主要是 v2 版本)中用于验证模型字段的装饰器,它的设计初衷是作用于类方法(通过 @classmethod 标识),而非普通的实例方法(带 self 参数的方法)。
  2. 实例方法需要先创建类的实例才能调用,而字段验证是在实例创建前对输入数据进行校验,因此 Pydantic 不允许将验证器定义为实例方法,否则会抛出这个用户错误。
 

类型嵌套

接口文档

image

 

请求参数

image

 

响应结果

image

 

接口文档

image

 

请求参数

image

 

{"users": [{"name": "haha","age": 19,"birth": "1995-01-10","friends": [],"addr": {"province": "广东","city": "深圳"}},{"name": "ren","age": 18,"birth": "2001-01-11","friends": [],"addr": {"province": "北京","city": "朝阳"}}]
}

  

响应结果

image

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1215129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

别只盯着那只“鹦鹉”了!Claude3.7与Sora2才是真正的生产力怪兽

在AI圈子里混久了 你会发现一个怪象 大家都只知道那个G开头的模型 其实在很多专业领域 真正的王者早就换人了 比如写代码和长文本分析 Claude系列才是永远的神 它的逻辑推理能力 简直像是一个严谨的大学教授 而不仅仅是一个会聊天的机器人 还有最近火出圈的Sora2 以…

2026链条直销厂家榜:获取优质厂家联系方式,链条/非标链条/不锈钢链条/工业链条,链条源头厂家推荐排行

在全球工业链加速重构的背景下,链条作为机械传动与输送的核心部件,其质量稳定性直接影响设备运行效率与寿命。据中国机械通用零部件工业协会数据显示,2024年我国链条市场规模突破320亿元,年复合增长率达6.8%,但行…

Agent Skill:新一代 AI 设计模式的原理、实践与 MCP 协同应用解析

目录 前言1. Agent Skill 的概念与发展背景1.1 什么是 Agent Skill1.2 Agent Skill 的产生背景 2. Agent Skill 的核心功能与价值2.1 教会模型“如何做”&#xff0c;而不仅是“做什么”2.2 按需加载与条件触发机制2.3 跨平台复用与开放标准 3. Agent Skill 的技术结构设计3.1 …

Git行尾符战争:如何彻底解决CRLF与LF的跨平台噩梦

目录 前言1 问题现象&#xff1a;那些令人困惑的Git警告1.1 典型的警告信息1.2 相关错误现象 2 问题本质&#xff1a;CRLF与LF的历史渊源2.1 技术背景解析2.2 Git的智能处理机制2.3 核心配置参数&#xff1a;core.autocrlf 3 根本原因&#xff1a;为什么会出现这个问题&#xf…

hot100 230.二叉搜索树中第K小的元素

思路&#xff1a;中序遍历。在二叉搜索树中&#xff0c;中序遍历的遍历顺序就是在从小到大遍历节点值&#xff0c;所以遍历到的第k个节点值就是答案。每次递归完左子树&#xff0c;在根节点的操作中&#xff0c;把k减少1&#xff0c;表示按照中序遍历的顺序访问到了一个节点。当…

hot100 199.二叉树的右视图

见代码随想录 199.二叉树的右视图

hot100 108.将有序数组转换为二叉搜索树

见代码随想录 108.将有序数组转换为二叉搜索树

hot100 98.验证二叉搜索树

见代码随想录 98.验证二叉搜索树

做久坐提醒+拉伸指导工具,设定工作时长,久坐超一小时自动提醒,推送三分钟简易拉伸动作(图文步骤),记录每日拉伸次数。

1. 实际应用场景描述 在现代办公环境中&#xff0c;许多白领、程序员、设计师等长时间坐在电脑前工作&#xff0c;容易导致&#xff1a; - 颈椎、腰椎问题 - 血液循环不畅 - 精神疲劳 虽然知道要活动&#xff0c;但往往忘记或拖延。 本工具适用于办公室、居家办公、学生自习等…

Java毕设项目:基于springboot的社区健康管理系统(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java计算机毕设之基于springboot的社区健康管理系统基于SpringBoot的社区医疗健康管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

markdown博客发布多平台实战指南

markdown博客发布多平台实战指南 作为技术创作者,内容生产只完成了一半,高效的发布同样关键。下面这套基于 Markdown + 图床 + 多平台工具的工作流程,能让你的博客分发到公众号、csdn、掘金、博客园等平台, 一、发…

2025精选浙江干式打磨台靠谱厂家推荐,水帘除尘器/湿式打磨台/喷淋塔除尘器/活性炭吸附干式打磨台制造厂家怎么选择

随着制造业精细化发展和环保要求日益严格,干式打磨台作为打磨、抛光等工序中控制粉尘污染、保障职业健康的关键设备,其市场需求持续增长。浙江省作为我国重要的制造业和环保产业基地,涌现出一批在干式打磨台领域表现…

抖音直播卖货起号-汽水账号自然流提高了

抖音直播卖货起号-汽水账号自然流提高了目前这2天做一个新号 0粉丝 0关注的新号 店铺销量是个位数 基本也是0 目前直播开了2天 数据良好。自然流量在增加。 第一天 自然流量零星 第二天 随着时间的推移 自然流量明显…

【毕业设计】基于springboot的社区健康管理系统(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【课程设计/毕业设计】基于springboot的社区康养管理系统基于springboot的社区健康管理系统【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

SpringBoot快速上手,一周速通!

大家可以回想一下&#xff0c;当初我们最开始学习Java的时候&#xff0c;搭建一个Web所需要的步骤。。。 1、配置web.xml&#xff0c;加载spring和spring mvc 2、配置数据库连接、配置spring事务 3、配置加载配置文件的读取&#xff0c;开启注解 4、配置日志文件... 5、配…

从代码案例出发,从0到1详解Spring Boot!

大家都知道&#xff0c;Spring Boot框架目前不仅是微服务框架的最佳选择之一&#xff0c;还是现在企业招聘人才肯定会考察的点&#xff1b;很多公司甚至已经将SpringBoot作为了必备技能。但&#xff0c;现在面试这么卷的情况下&#xff0c;很多人面试时还只是背背面试题&#x…

真正的高手,都是贝叶斯主义者

有人问我&#xff1a;在这个黑天鹅乱飞、高不确定性、模糊混沌的世界&#xff0c;到底有没有一种底层逻辑&#xff0c;能让人稳赢&#xff1f; 一开始&#xff0c;我很想回答“没有”&#xff0c;后来&#xff0c;转念一想&#xff0c;如果非要说一个&#xff0c;那就是—— …

中国软件最大的短板,就藏在那个最窝囊的部门

在中国软件行业&#xff0c;交付可能是最窝囊的部门&#xff0c;没有之一。 论地位&#xff0c;他们没有话语权。 论责任&#xff0c;他们是妥妥的背锅侠&#xff1a;项目延期怪交付&#xff0c;回款困难怪交付&#xff0c;客户投诉还是怪交付。 大部分软件公司对交付都有很…