news 2026/7/20 12:42:14

从零接触FastAPI框架,今日学习day02

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零接触FastAPI框架,今日学习day02

一、前期回顾

前期我们day01学习接触了Django的同步与FastAPI异步区别,如何创建FastAPI项目以及如何通过路径传参传入动态参数,再通过FastAPI自带的接口文档进行测试https://blog.csdn.net/zaohuanxiang/article/details/162976300?spm=1001.2014.3001.5502

二、今日学习

今日我们学习query查询传参,请求体传参

三、query查询传参

query查询传参相比path路径传参区别在于,path路径传参是在于通过路径进行动态传参,query查询传参是在于通过URL中后面以键值对的组合传递参数

# 测试路由通过路径参数访问 @app.get('/path/{id}') # 路径动态传参 async def path_api(id:int): return {'code':200, 'msg':'ok', 'data':id} # 测试路由通过查询参数访问 @app.get('/query') async def query_api(id:int): return {'code':200, 'msg':'ok', 'data':id}

测试结果:

path路径传参:

query查询:

可以看出在url中两种方式的不同,在path路径传参时后面直接跟着传递的参数,而在query查询参数中是?的后面跟着id的参数,路径传参时需要注意路径动态传参时的参数,要与函数名小括号内的参数保持一致

在昨天我们学习到路径传参时,在函数名的括号中通过在定义的函数名中可以使用Path类,来做一些限制或者校验,而在查询参数也通过Query进行传参,

使用query是记得导包

from fastapi import Query

四、请求体传参

以上为查询参数,现在我们知道了什么为路径参数和查询参数,接下来我们学习请求体参数

之前所学的路径参数和查询参数,都有明显的局限性:

比如路径传参,只能传简单的值(id、名称),且长度有限,而查询参数,不适合传递用户信息或者商品详情等,隐私性较高的参数,所有我们接下来要学的请求体参数就可以解决前面的问题

关键前提:请求体与 HTTP 方法

请求体通常与「非查询类」HTTP 方法配合使用(符合 RESTful 规范):

  • POST:创建资源(如用户注册、新增商品)→ 必用请求体
  • PUT:全量更新资源(如修改商品所有信息)→ 必用请求体
  • PATCH:部分更新资源(如修改商品价格)→ 常用请求体
  • GET:查询资源 → 禁止使用请求体(不符合 HTTP 规范)

1、了解Pydantic

何为Pydantic:

Pydantic 是 Python 的「数据验证库」,也是 FastAPI 的核心依赖之一,主要作用:

  • 定义结构化数据模型(如请求体的字段、类型、约束)
  • 自动校验输入数据(类型、范围、格式等)
  • 自动序列化 / 反序列化(JSON ↔ Python 对象)
  • 自动生成接口文档(字段描述、示例值等)

FastAPI 的请求体参数,本质是「基于 Pydantic 模型定义的数据结构」,框架会自动完成:

  • 解析请求体的 JSON 数据
  • 按模型规则校验数据
  • 校验通过:将 JSON 转为 Python 对象传递给路由函数
  • 校验失败:返回标准化 422 错误

2、基础请求体的实现

首先我们需要先在控制台导入依赖

pip install pydantic

1、导入核心包

from fastapi import FastAPI from pydantic import BaseModel # 必须继承BaseModel才能实现数据校验 import uvicorn

2、创建一个FastAPI实例

app = FastAPI( title='FastAPI请求体教程', description='FastAPI请求体教程描述', version='0.1.0', )

3、定义Payload模型

# 定义Payload模型 class Payload(BaseModel): #定义字段 username:str password:str email:str age:int phone:str

4、定义路由、接收Payload模型并返回响应数据

@app.post('/payload') async def payload(payload: Payload): return {'code':200, 'msg':'请求成功', 'data':{ 'username':payload.username, 'password':payload.password, 'email':payload.email, 'phone':payload.phone, }} if __name__ == "__main__": uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True)

5、测试接口

可以看到测试结果,code返回200,msg请求成功,并且成功返回了在前端传入的参数

以上为简单模拟测试请求体传参,我们还可以在定义字段中,通过Field里面传入参数对字段进行校验,Field记得到导包

from pydantic import BaseModel, Field
class Payload(BaseModel): #定义字段 username:str=Field( title='用户名', description='用户名描述', min_length=4, max_length=20, example='admin' ) password:str=Field( title='密码', description='密码描述', min_length=6, max_length=20, pattern=r'^\S{6,20}$', example ='123456' ) email:str=Field( title='邮箱', description='邮箱描述', min_length=6, max_length=20, pattern=r'^[a-zA-Z0-9_]{2,20}@[a-zA-Z0-9]{1,10}\.[a-zA-Z0-9]{1,5}$', example='123456789@qq.com' ) phone:str=Field( title='手机号', description='手机号描述', min_length=11, max_length=11, pattern=r'^1[3456789]\d{9}$', example='13812341234' )

6.总结

本文是 FastAPI 学习系列的第二篇,在回顾了 Day01 同步/异步区别及路径传参的基础上,重点讲解了Query 查询传参Request Body 请求体传参的核心用法。

  1. Query 查询传参 vs Path 路径传参

    • Path:参数嵌入 URL 路径中(如/path/{id}),适用于资源定位,需配合Path类进行校验。
    • Query:参数以键值对形式拼接在 URL?之后(如/query?id=1),适用于筛选、分页等场景,需导入并使用Query类进行约束。
    • 注意:无论哪种方式,URL 中的参数名必须与函数定义的形参名保持一致。
  2. 请求体(Request Body)传参

    • 适用场景:解决了路径和查询参数在数据长度、隐私性及结构化方面的局限。遵循 RESTful 规范,主要用于POST(创建)、PUT(全量更新)、PATCH(部分更新),严禁用于 GET 请求
    • 核心依赖 Pydantic:FastAPI 通过 Pydantic 实现数据模型的自动解析、校验、序列化及接口文档生成。校验失败会自动返回标准的 422 错误。
  3. Pydantic 模型与 Field 高级校验

    • 基础用法:继承BaseModel定义数据结构,FastAPI 自动将 JSON 转为 Python 对象。
    • Field 增强:通过Field()对字段进行精细化控制,支持设置标题、描述、长度限制(min_length/max_length)、正则匹配(pattern)及示例值(example),显著提升接口文档的可读性和数据安全性。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/20 12:42:06

玩转 DeepSeek TUI:CodeWhale 从入门到实战完全指南

前言:在 AI 编程辅助工具层出不穷的今天,如何在命令行中获得高效、直观且费用透明的交互体验?CodeWhale 作为一款专为 DeepSeek 设计的 TUI(终端用户界面)客户端,凭借其强大的项目管理、技能拓展和实时费用…

作者头像 李华
网站建设 2026/7/20 12:39:48

嵌入式系统时钟域管理:从原理到实践的低功耗优化指南

1. 时钟域管理:嵌入式系统功耗优化的基石在嵌入式系统,尤其是汽车电子、移动设备和物联网终端的设计中,功耗管理从来都不是一个“锦上添花”的选项,而是决定产品成败的核心指标。我经历过不止一个项目,前期功能跑得飞起…

作者头像 李华
网站建设 2026/7/20 12:39:35

5分钟免费获得Mac级中文显示:PingFangSC字体完整使用指南

5分钟免费获得Mac级中文显示:PingFangSC字体完整使用指南 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件,包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 还在为Windows和Linux系统上中文字体…

作者头像 李华
网站建设 2026/7/20 12:39:30

如何永久保存微信聊天记录?5步开启你的数字记忆守护之旅

如何永久保存微信聊天记录?5步开启你的数字记忆守护之旅 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeC…

作者头像 李华
网站建设 2026/7/20 12:36:31

Streamlit应用Heroku部署实战:从本地到公网的全流程解析

1. 项目概述:一个能跑通的 Streamlit Heroku 全流程,不是教程拼凑,而是真实部署现场复盘Streamlit 是我过去三年里在数据科学团队内部推广最顺利的工具——不是因为它多炫酷,而是它把“写完分析代码 → 做成可交互界面 → 让业务…

作者头像 李华
网站建设 2026/7/20 12:36:05

利用Moon Bridge将DeepSeek接入OpenAI Codex:低成本AI编程助手实战

你还在为 OpenAI Codex 的官方模型费用发愁吗?或者,你只是想找一个更接地气、成本更可控的智能编码助手,却苦于官方渠道的高门槛和复杂的配置?最近,一个在开发者社区里流传开来的方案,让不少人眼前一亮&…

作者头像 李华