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

FastAPI python web开发- 路由与参数(路径参数查询参数请求体参数)

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

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

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

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

路由与参数(路径参数&查询参数&请求体参数)

简单来说,路由(Routing)就是“根据请求找对应代码”的映射关系

在 Web 开发中,它可以拆解为三个核心要素的绑定:

  1. 请求方法(GET、POST、PUT 等)

  2. URL 路径(如/users/items/123

  3. 处理函数(执行具体业务逻辑的代码)

路由的本质就是定义一张“查找表”:当客户端用“方法 A”访问“路径 B”时,服务器自动执行“函数 C”

以下是 FastAPI 中路径参数查询参数请求体参数的详细对比表格,帮你从定义、位置、用途到代码写法一目了然:

对比维度路径参数 (Path Parameters)查询参数 (Query Parameters)请求体参数 (Request Body)
定义(是什么)URL路径中固定占位的动态变量,用于定位具体资源。URL路径? 之后的键值对,用于过滤、排序或分页。放在 HTTP请求体(Body)中的完整数据,通常为 JSON 格式。
在 URL 中的位置属于路径的一部分,例如:/users/123属于路径末尾的查询字符串,例如:/users?age=18&page=1不在 URL 中,位于请求报文的独立数据区域(浏览器看不到)。
常用 HTTP 方法所有方法(GET、POST、PUT、DELETE)主要是GET请求(也可用于 DELETE)主要是POST、PUT、PATCH(GET 强烈不推荐带 Body)
典型使用场景指定特定资源: 获取 ID 为 123 的用户,或修改 ID 为 5 的文章。筛选和辅助: 查询第 2 页、每页 10 条、按价格排序。提交复杂数据: 注册新用户(包含用户名、密码、邮箱等完整对象),或编辑一篇文章的全文。
数据复杂度简单数据类型(intstrUUID简单数据类型(intstrboolfloat复杂结构(嵌套对象、数组,通常用 Pydantic 模型定义)
是否必须传递必须(URL 中缺了它,路由无法匹配,直接报 404)非必须(可选),除非你显式声明为必填(...取决于业务逻辑,通常业务需要时必填,但框架层面默认可选。
数据安全性较高(只暴露资源 ID)较低(明文显示在浏览器地址栏,易被收藏/记录,不传敏感信息(数据在 Body 中,适合传输密码、身份证号等隐私内容)
在 FastAPI 中的定义方式写在路径字符串的{}中:@app.get("/users/{user_id}")函数参数同名即可。定义为非路径参数的函数参数:def list(skip: int = 0)定义为Pydantic 模型类型:def create(item: Item)(其中Item继承自BaseModel
能否在函数参数中省略类型注解可以,但强烈建议加上(方便数据自动转换和校验)。可以,但不加注解会被视为str类型。必须使用类型注解(否则 FastAPI 会把它当作查询参数)。

路径参数

路径参数:URL 路径中的可变部分,用于定位具体资源**(如/users/123中的123)。

我们看一个实例:

# -------- 1. 路径参数 -------- @app.get("/users/{user_id}") async def get_user(user_id: int): """路径参数:必须提供,用于获取特定用户""" return {"user_id": user_id, "name": f"用户_{user_id}"}

然后打开浏览器访问http://127.0.0.1:8000/docs,进行测试:

查询参数

查询参数:URL 问号后面的键值对,用于过滤、排序、分页(如/items?start=10&limit=20)。

我们看一个实例:

# -------- 2. 查询参数 -------- @app.get("/items") async def list_items(skip: int = 0, limit: int = 10): """查询参数:可选,用于分页""" return {"skip": skip, "limit": limit, "items": ["item1", "item2"]}

然后打开浏览器访问http://127.0.0.1:8000/docs,进行测试:

请求体参数

请求体参数:HTTP 请求体(Body)中携带的数据,通常是 JSON,用于提交/修改复杂数据(如注册新用户)。

我们看一个实例:

# -------- 3. 请求体参数 -------- class ItemCreate(BaseModel): name: str price: float ​ @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/1163970/

相关文章:

  • Linux gpm命令详解|纯文本终端鼠标启用、复制粘贴超实用教程
  • AI驱动混线生产
  • TVA与VLA模型:具身智能的跨模态桥梁(7)
  • Linux第18篇:Spring Boot 生产部署完全指南——从“能跑”到“敢拍胸脯”
  • 英文论文重复率与AI率问题
  • 长春除甲醛选哪家?2026年靠谱供应商清单公开 - 米諾
  • 终极内存优化:PilotGo-plugin-MFD实时可视化UMA/NUMA架构碎片数据
  • 免费GEO学习渠道汇总,新手入门不用花冤枉钱 - GrowUME
  • 2026年7月最新广州宝玑官方售后服务网点地址及客服电话一览 - 亨得利钟表维修中心
  • OSAPIChecker:终极操作系统API合规性检查工具完全指南
  • 在线设计工具哪个最适合电商主图?实测对比 - 米諾
  • BI试点如何验收:从基线口径到目标指标的3个里程碑清单
  • OpenClaw本地部署:一键直连微信的私有化AI Agent实战指南
  • 如何快速上手OSAPIChecker:5分钟快速开始教程 [特殊字符]
  • 好用还专业!高效论文写作全流程AI论文工具推荐(2026 最新)
  • 为什么需要SBOM?openEuler软件物料清单的完整实施指南
  • Kubernetes 系列【10】控制器:ReplicaSet(副本集)
  • 架构师和项目经理:两个角色的分工协作
  • 2026年7月最新金华宇舶官方售后客户服务热线与维修网点地址汇总 - 亨得利官方服务中心
  • 2026年7月最新上海雅典官方售后客服电话及服务网点地址查询 - 亨得利官方服务中心
  • Elasticsearch:V7.17.15部署
  • 怎么寄快递才能便宜呢?2026年7月寄快递省钱攻略 - 生活情报姬
  • HS2汉化补丁终极指南:一键解锁Honey Select 2完整中文体验
  • Windows 命令提示符(CMD)恶意脚本分析篇
  • Agent Runtime 不是一个库,是一个你要运维的进程
  • 2026长春雅思培训主流机构综合实力排行参考 - 互联网科技品牌测评
  • Linux ftpcount命令详解|实时统计FTP在线用户数与并发上限
  • 开源软件供应链安全:openEuler来源安全保障的3个关键检查点
  • Cocos Creator游戏提审避坑指南:性能优化、内存管理与平台兼容性实战
  • 2026年7月最新徐州伯爵官方售后联系电话与客户服务中心网点地址 - 亨得利钟表维修中心