尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

FastAPI python web开发- 路由与参数(路径参数查询参数请求体参数)
📅 发布时间:2026/7/11 0:04:56

大家好,我是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 条、按价格排序。提交复杂数据: 注册新用户(包含用户名、密码、邮箱等完整对象),或编辑一篇文章的全文。
数据复杂度简单数据类型(int、str、UUID)简单数据类型(int、str、bool、float)复杂结构(嵌套对象、数组,通常用 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,进行测试:

相关新闻

  • TVA与VLA模型:具身智能跨模态桥梁(系列)
  • Linux gpm命令详解|纯文本终端鼠标启用、复制粘贴超实用教程
  • 为什么你需要OSAPIChecker?操作系统API合规性的10个关键挑战

最新新闻

  • STM32驱动压电蜂鸣器实现高可靠性警报系统设计
  • 2026年黄冈公司注销服务选择指南:如何甄别信誉可靠的服务商 - 品牌鉴赏官2026
  • Android 13+ 精确定位适配:从 ACCESS_FINE_LOCATION 到前台服务 4 步实践
  • TC78H651AFNG与PIC18F86K90直流电机驱动方案设计
  • 3分钟解锁:终极免费方案让你的暗影精灵性能飙升300%
  • 2026年宝鸡离婚律师推荐怎么挑?这5个关键不踩雷 - 本地品牌推荐

日新闻

  • OpenClaw本地部署:一键直连微信的私有化AI Agent实战指南
  • Kubernetes 系列【10】控制器:ReplicaSet(副本集)
  • 怎么寄快递才能便宜呢?2026年7月寄快递省钱攻略 - 生活情报姬

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号