news 2026/7/11 19:48:34

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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,进行测试:如果输入字符个数范围不对,就会报错

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 19:47:50

VSCode 远程开发 3 种模式对比:WSL vs SSH vs Container 性能与场景分析

VSCode 远程开发三大模式深度评测:WSL、SSH 与容器化方案的技术抉择当开发者需要在异构环境中构建跨平台应用时,VSCode 的远程开发功能已成为现代工作流的核心组件。本文将深入解析 Remote-WSL、Remote-SSH 和 Remote-Container 三种主流模式的技术实现差…

作者头像 李华
网站建设 2026/7/11 19:47:11

国创(大创)申报书撰写:3大类别核心差异与7个立项关键点解析

国创(大创)申报书撰写:3大类别核心差异与7个立项关键点解析 每年春季,高校实验室的灯光总会亮到更晚——又到了国家级大学生创新创业训练计划(简称"国创/大创")的申报季。作为培养本科生科研创新…

作者头像 李华
网站建设 2026/7/11 19:46:30

Claude多智能体模式:Advisor与Orchestrator架构实战解析

如果你正在使用 Claude 系列模型进行开发,可能已经发现了一个现实问题:Fable 5 虽然性能强大,但成本高昂;Sonnet 5 价格亲民,但在复杂任务上表现有限。如何在保证性能的同时控制成本,成为了实际开发中的关键…

作者头像 李华
网站建设 2026/7/11 19:46:05

工业负载控制方案:TPD2017FN与PIC18F4685应用详解

1. 项目概述:工业环境中的负载控制方案在工业自动化领域,精确控制电感和电阻负载是许多关键应用的基础需求。本项目采用TPD2017FN智能高侧开关与PIC18F4685微控制器组合方案,构建了一个可靠的工业级负载控制系统。TPD2017FN是德州仪器(TI)推出…

作者头像 李华
网站建设 2026/7/11 19:46:00

Verilog代码编写技巧与最佳实践

Verilog代码编写技巧与最佳实践:从入门到精通的完整指南 一、Verilog概述 1.1 什么是Verilog Verilog是一种硬件描述语言(HDL),用于描述数字电路和系统的行为、结构和功能。它是数字IC设计、FPGA开发和ASIC设计中最常用的语言之一。 1.2 Verilog发展历程 阶段 时间 重要…

作者头像 李华
网站建设 2026/7/11 19:44:54

CPLEX vs 启发式:航班时刻表优化 48 小时求解与 2 小时近优解对比

CPLEX与启发式算法在航班时刻表优化中的实战对比:48小时精确解与2小时近优解的技术抉择当航空公司面临数百万美元的运营成本波动时,航班时刻表优化算法的选择直接关系到利润空间。传统商业求解器CPLEX在解决150,000变量的混合整数线性规划(MI…

作者头像 李华