当前位置: 首页 > news >正文

fastapi2

我们继续用费曼学习法,从基础用法进阶到生产环境高频使用的FastAPI核心能力,全程保持「大白话类比→概念拆解→可直接运行的完整代码→一步到位的验证方式」的节奏,所有代码都可以直接复制到之前的main.py中运行,无需额外复杂配置。


一、进阶参数校验:给你的接口加“严格安检”

大白话类比

之前我们只是检查客人提交的东西“是不是数字/字符串”(基础类型校验),现在我们要升级安检规则:

  • 手机号必须是11位合规格式
  • 用户名不能少于2位、不能超过20位
  • 商品价格不能是负数
  • 密码必须符合安全规范

FastAPI 提供了Query(查询参数校验)、Path(路径参数校验),配合 Pydantic 的Field(请求体字段校验),可以实现任意粒度的参数规则校验,所有规则还会自动同步到API文档里,无需手动编写。

核心概念解释

  • Path:专门给路径参数加校验规则,比如限制数字范围、必填约束、文档描述
  • Query:专门给查询参数加校验规则,比如限制字符串长度、正则匹配、是否必填
  • Field:给Pydantic模型(请求体/响应体)的字段加校验规则,用法和上述两个完全一致

可执行代码

fromfastapiimportFastAPI,Path,QueryfrompydanticimportBaseModel,Field# Field 用于请求体字段校验app=FastAPI()# 1. 路径参数进阶校验@app.get("/items/{item_id}")asyncdefread_item(# Path:路径参数item_id,必须大于等于1、小于等于100,规则自动同步到文档item_id:int=Path(title="物品ID",ge=1,le=100,description="物品的唯一ID,合法范围1-100")):return{"item_id":item_id,"message":"路径参数校验通过"}# 2. 查询参数进阶校验@app.get("/users/")asyncdefread_users(# Query:用户名必填,长度2-20位;年龄可选,18-100岁;手机号必须符合正则username:str=Query(min_length=2,max_length=20,description="用户名,2-20位字符"),age:int|None=Query(default=None,ge=18,le=100,description="年龄,合法范围18-100岁"),phone:str|None=Query(default=None,regex=r"^1[3-9]\d{9}$",description="11位国内手机号")):return{"username":username,"age":age,"phone":phone,"message":"查询参数校验通过"}# 3. 请求体字段进阶校验(Field)classUserCreate(BaseModel):username:str=Field(min_length=2,max_length=20,description="用户名")password:str=Field(min_length=8,description="密码至少8位")age:int=Field(ge=18,le=100,description="年龄18-100岁")email:str=Field(regex=r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$",description="合法邮箱地址")@app.post("/users/")asyncdefcreate_user(user:UserCreate):# exclude={"password"} :返回结果中排除密码字段,避免敏感信息泄露return{"message":"用户创建成功","user":user.dict(exclude={"password"})}

验证方式

  1. 运行服务:uvicorn main:app --reload,打开交互式文档http://127.0.0.1:8000/docs
  2. 测试/items/{item_id}
    • 输入item_id=0101,会直接返回422校验错
http://www.jsqmd.com/news/642381/

相关文章:

  • Wazuh OVA镜像部署实战:从零搭建开源XDR-SIEM一体化平台
  • AI 到底会不会取代人类?从四大行业落地真相看程序员的“危”与“机”
  • SITS2026多模态搜索上线前48小时:一场召回率突降38%的故障溯源与反脆弱加固
  • 2026年排行好的找工作招工平台推荐 - 品牌宣传支持者
  • D3KeyHelper终极指南:5分钟掌握暗黑3技能自动化神器
  • STM32F103实战:Zbar库移植与二维码识别优化指南
  • FT232H连接Vivado出现问题2026
  • OpenVSP:快速上手指南!5分钟学会开源参数化飞机设计
  • 新手SRC挖掘实战 | 一次从信息泄露到校园教务后台的完整路径
  • 从CSS选择器到DOM树匹配:Easy-Scraper如何重构网页数据提取的技术范式
  • 光影的艺术:从入门到电影级宣传片的布光与器材全解析
  • CDLF多级泵在高层供水系统中稳不稳?关键不在参数,而在这4个点
  • 比特 GEO 优化:亳州本地AI 搜索排名与本地地理定位双引擎,药都企业精准获客首选
  • 别再手动算脉冲了!用STM32CubeMX的编码器模式,5分钟搞定直流电机测速(附防溢出处理代码)
  • 入行AI应用开发?AI应用开发岗都是先混进去再说!
  • AI创作利器:Harness+OpenClaw+CLI实战
  • 先免费试用下Claude code安装使用(教程)
  • web后端python安全-总结
  • 电动牙刷语音播报蓝牙屏驱电机驱动八大解决方案
  • 华为云引领工业软件云端革命,【aigc】chrome-devtools-mcp怎么玩?。
  • 从GTP到GTM:深入解析Xilinx Ultrascale系列GT收发器的演进与选型指南
  • 提升企业知识使用率的运营活动设计指南
  • INTERFACE AZI-2502接口输出模块
  • Mysql--基础知识点--98--临键锁 VS 间隙锁
  • 除螨仪到底有没有效果?2026 十款家用高性价比除螨仪品牌精选推荐
  • LightGBM核心优化策略与实战调参指南
  • 2026年普通人做什么副业真能赚钱?1w个样本告诉你答案
  • spring ai如何实现Agent工作流编排,支持多轮对话,上下文记忆,工具自动调用?
  • 保姆级教程:PVE/Proxmox VE拔掉独显后网络失联?一招搞定网卡名绑定(Debian系通用)
  • **发散创新:基于Python的文件API深度封装与实战应用**在现代软件开发中,**文