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

发布时间:2026/7/20 12:42:21

从零接触FastAPI框架,今日学习day02 一、前期回顾前期我们day01学习接触了Django的同步与FastAPI异步区别如何创建FastAPI项目以及如何通过路径传参传入动态参数再通过FastAPI自带的接口文档进行测试https://blog.csdn.net/zaohuanxiang/article/details/162976300?spm1001.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何为PydanticPydantic 是 Python 的「数据验证库」也是 FastAPI 的核心依赖之一主要作用定义结构化数据模型如请求体的字段、类型、约束自动校验输入数据类型、范围、格式等自动序列化 / 反序列化JSON ↔ Python 对象自动生成接口文档字段描述、示例值等FastAPI 的请求体参数本质是「基于 Pydantic 模型定义的数据结构」框架会自动完成解析请求体的 JSON 数据按模型规则校验数据校验通过将 JSON 转为 Python 对象传递给路由函数校验失败返回标准化 422 错误2、基础请求体的实现首先我们需要先在控制台导入依赖pip install pydantic1、导入核心包from fastapi import FastAPI from pydantic import BaseModel # 必须继承BaseModel才能实现数据校验 import uvicorn2、创建一个FastAPI实例app FastAPI( titleFastAPI请求体教程, descriptionFastAPI请求体教程描述, version0.1.0, )3、定义Payload模型# 定义Payload模型 class Payload(BaseModel): #定义字段 username:str password:str email:str age:int phone:str4、定义路由、接收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, host127.0.0.1, port8000, reloadTrue)5、测试接口可以看到测试结果code返回200msg请求成功并且成功返回了在前端传入的参数以上为简单模拟测试请求体传参我们还可以在定义字段中通过Field里面传入参数对字段进行校验,Field记得到导包from pydantic import BaseModel, Fieldclass Payload(BaseModel): #定义字段 username:strField( title用户名, description用户名描述, min_length4, max_length20, exampleadmin ) password:strField( title密码, description密码描述, min_length6, max_length20, patternr^\S{6,20}$, example 123456 ) email:strField( title邮箱, description邮箱描述, min_length6, max_length20, patternr^[a-zA-Z0-9_]{2,20}[a-zA-Z0-9]{1,10}\.[a-zA-Z0-9]{1,5}$, example123456789qq.com ) phone:strField( title手机号, description手机号描述, min_length11, max_length11, patternr^1[3456789]\d{9}$, example13812341234 )6.总结本文是 FastAPI 学习系列的第二篇在回顾了 Day01 同步/异步区别及路径传参的基础上重点讲解了Query 查询传参与Request Body 请求体传参的核心用法。Query 查询传参 vs Path 路径传参Path参数嵌入 URL 路径中如/path/{id}适用于资源定位需配合Path类进行校验。Query参数以键值对形式拼接在 URL?之后如/query?id1适用于筛选、分页等场景需导入并使用Query类进行约束。注意无论哪种方式URL 中的参数名必须与函数定义的形参名保持一致。请求体Request Body传参适用场景解决了路径和查询参数在数据长度、隐私性及结构化方面的局限。遵循 RESTful 规范主要用于POST创建、PUT全量更新、PATCH部分更新严禁用于 GET 请求。核心依赖 PydanticFastAPI 通过 Pydantic 实现数据模型的自动解析、校验、序列化及接口文档生成。校验失败会自动返回标准的 422 错误。Pydantic 模型与 Field 高级校验基础用法继承BaseModel定义数据结构FastAPI 自动将 JSON 转为 Python 对象。Field 增强通过Field()对字段进行精细化控制支持设置标题、描述、长度限制min_length/max_length、正则匹配pattern及示例值example显著提升接口文档的可读性和数据安全性。

相关新闻