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

FastAPI python web开发- 参数校验(PathQueryField)

大家好,我是Java1234_小锋老师,最近更新《2027版 一天学会 FastAPI Python web开发 视频教程(无废话版)》专辑,感谢大家支持。

本课程主要介绍和讲解FastAPI简介,HelloWorld实现,自动生成交互式API文档,路径参数,查询参数,请求体,参数校验,响应模型,表单数据和模型,中间件,依赖注入,集成SQLAlchemy ORM 操作数据库,集成Pydantic数据校验等

视频教程+课件+源码打包下载:

链接:https://pan.baidu.com/s/1_NzaNr0Wln6kv1rdiQnUTg
提取码:0000

参数校验(Path&Query&Field)

我们基于前面给出的三个示例,详细讲解FastAPI 参数校验,并分别针对路径参数查询参数请求体,展示如何使用PathQueryField进行额外约束和校验。

常见校验参数一览

参数名适用对象作用
gt/ge数字大于 / 大于等于
lt/le数字小于 / 小于等于
min_length/max_length字符串字符串长度范围
regex字符串正则表达式匹配
min_items/max_items列表列表元素个数
...(省略号)所有表示该字段必须提供(无默认值)
default所有设置默认值
title/description所有用于生成 API 文档

路径参数(Path Parameters)—— 使用Path

路径参数是 URL 中必需的一部分,比如/users/{user_id}。默认情况下,FastAPI 会根据类型注解进行简单类型转换(如int),但我们可以借助Path增加校验规则,例如:

  • 限定数值范围(gtgeltle

  • 设置描述信息(用于 OpenAPI 文档)

  • 甚至使用正则表达式(regex)校验字符串路径参数(不过路径参数通常是数字或短字符串)

我们看下实例:

from fastapi import FastAPI, Path app = FastAPI() @app.get("/users/{user_id}") async def get_user( user_id: int = Path(..., title="用户ID", description="必须是正整数", gt=0, le=1000) ): """路径参数:必须提供,且为正整数,范围 1~1000""" return {"user_id": user_id, "name": f"用户_{user_id}"}

然后打开浏览器访问http://127.0.0.1:8000/docs,进行测试:如果输入范围不对,就会报错

查询参数(Query Parameters)—— 使用Query

查询参数是 URL 中?后面的键值对,通常是可选的,也可以设置默认值。用Query可以:

  • 设置默认值(当然直接赋值也可)

  • 校验最大/最小值、字符串长度

  • 使用regex校验字符串格式

  • 设置deprecated

我们看一个示例:

from fastapi import FastAPI, Query app = FastAPI() @app.get("/items") async def list_item( skip: int = Query(0, title="跳过条数", ge=0, description="必须 ≥0"), limit: int = Query(10, title="返回条数", ge=1, le=100, description="1~100 之间") ): """查询参数:可选,带默认值和校验""" return {"skip": skip, "limit": limit, "items": ["item1", "item2"]}

然后打开浏览器访问http://127.0.0.1:8000/docs,进行测试:如果输入范围不对,就会报错

请求体(Request Body)—— 使用 Pydantic +Field

请求体通常使用 Pydantic 的BaseModel定义结构,并在字段上使用Field添加校验:

  • 必填/可选(通过默认值控制)

  • 字符串长度(min_lengthmax_length

  • 数值范围(gtgeltle

  • 正则匹配(regex

  • 描述信息等

我们看一个实例:

from fastapi import FastAPI from pydantic import BaseModel, Field app = FastAPI() class ItemCreate(BaseModel): name: str = Field(..., title="物品名称", min_length=2, max_length=50, description="2~50个字符") price: float = Field(..., title="价格", gt=0, le=9999.99, description="必须大于0,最多9999.99") # 可增加可选字段 description: str = Field(None, max_length=200, description="可选描述,最长200字符") @app.post("/items") async def create_item(item: ItemCreate): """请求体参数:POST 时传入 JSON,所有字段经过校验""" return {"message": "Item created", "item": item}

然后打开浏览器访问http://127.0.0.1:8000/docs,进行测试:如果输入字符个数范围不对,就会报错

http://www.jsqmd.com/news/1169392/

相关文章:

  • 为什么用 PHP 写 AI Agent 而不是 Python
  • 微服务架构:把巨无霸拆成小餐馆
  • COBIT 2019 与 ISO/IEC 38500:2014 对比:5个核心差异点与适用场景选择
  • VSCode TypeScript 调试配置:5步实现源码映射与断点调试
  • Unity Text组件颜色系统深度解析:从顶点色到富文本的性能优化实战
  • 数据库注入攻击的AI防御:用深度学习检测SQL注入的变种与绕过
  • 招聘时间可视化神器:3分钟掌握Boss Show Time,求职效率飙升300%
  • TLA2518与GD32VF103的ADC接口设计与精度优化
  • Java面试中容易忽略的细节:异常处理与日志规范实战经验
  • 终极指南:如何用一键重置工具快速修复Windows更新问题
  • 他不怎么懂技术,但依然是一个合格的管理者
  • STM32驱动压电扬声器方案与优化策略
  • Hermes Agent Windows一键整合包部署指南
  • 梅尔滤波器组设计详解:从 40 个三角滤波器到人耳听觉模拟
  • 开发者工具化实战:用全球地震速报API构建地震监测模块
  • Obsidian插件汉化终极指南:5分钟实现零代码中文翻译
  • X-Mouse Controls:重新定义Windows鼠标交互的智能工作方式
  • Clos网络架构实战:从3级拓扑到严格无阻塞的2n-1条件验证
  • DBeaver驱动包终极指南:告别网络依赖,一键配置30+数据库连接
  • UABEA深度解析:Unity资源包提取、编辑与重构实战指南
  • LPMS-B2与MPU6050/DMP对比:3款IMU在机器人姿态解算中的精度与延迟实测
  • PDF补丁丁:免费开源的一站式PDF工具箱,轻松解决文档处理难题
  • PBR基础
  • 如何识别AI模型虚假命名与技术谣言
  • PyCharm 2024.3 汉化与界面优化:3个必装插件与10项效率设置详解
  • 服务网格:微服务的“隐形保镖“
  • 3分钟掌握AI成本控制:TikTokenizer在线分词器完全指南
  • AI 面试追问的深度设计:表面答案正确,追问一层就露馅
  • 为什么关键词堆砌在AI搜索时代完全失效?
  • DOS 内存管理演进:从640KB限制到HIMEM.SYS的3个关键突破