请求数据(路由、body) 📅 发布时间:2026/9/1 20:33:44 👁 浏览次数: Main.pyfrom typing import Annotated from fastapi import FastAPI, Path,Query from pydantic import BaseModel, Field app FastAPI() app.get(/) async def root(): return {message: Hello World} # 一、路由上的参数传参方法 # 法一路径参数——直接给出要的东西在数据库里的id。 # {article_id} 大括号语法 路径参数变量写在 URL 路径里面 # 访问格式/p/11 (http://127.0.0.1:8000/p/11) app.get(/p/{article_id}) # async def article_detail(article_id: int): 无校验写法 async def article_detail(article_id: Annotated[int, Path(gt2, le100, descriptionid大于2小于等于100)]): return {article_id: article_id} # 校验语法Annotated(基础类型, 附加信息1, 附加信息2……) # 第一个参数 int基础数据类型第二个 Path()告诉 FastAPI这是路径参数并且在这里写校验规则、描述文档。 # gt → greater than 大于 # ge → greater‑equal 大于等于 # lt → less than 小于 # le → less‑equal 小于等于 # description 写给人看的 # 法二查询参数查询参数不出现在路由路径字符串/article/list里面而是通过?keyvalue的形式进行拼接 # 由于查询参数前端有可能没有传递因此查询参数通常会定义默认值而如果没有指定默认值那么就意味着这个查询参数是必传的 # 访问格式/article/list?page1size2 app.get(/article/list) # async def article_list(page: int 0, size: int 10): 无校验写法 async def article_list(page: Annotated[int, Query(ge1)] 1, size: Annotated[int, Query(ge10)] 10): return {page: page, size: size} # 校验第 2 个Query() →告诉 FastAPI这是查询参数url ?keyvalue同时写默认值、校验规则、文档描述 # 二、Body上的参数 # HTTP 规定GET 请求没有 Body GET 不能传请求体。Body 几乎都配合app.post() # Pydantic模型用来规定POST请求体JSON长什么样 class LoginIn(BaseModel): # 登陆系统从客户端传进来的数据 email: Annotated[str, Field(..., description邮箱)] # ...表示该参数必传description让大模型识别到字段 password: Annotated[str, Field(..., description密码, min_length8, max_length16)] # 类登陆系统 app.post(/login) async def login(data: LoginIn): email data.email password data.password return {email: email, password: password} 校验总结 Path() → 路径参数校验url 大括号{item_id} Query() → 查询参数校验url ?item_idxxx Field() → Pydantic BaseModel 内部字段校验POST 请求体 JSON 关于URL的理解 URL 互联网上的「详细地址」所有网页都靠 URL 定位资源。 例如 http://127.0.0.1:8000/p/10?page2size20 1. http:// → 通信规则相当于约定用普通话沟通敲门的方式 2. 127.0.0.1 → 房子的门牌号你自己电脑本机 3. :8000 → 这栋房子的哪个窗口。一台电脑可以开很多服务8000 就是 FastAPI 服务窗口。好比一栋大楼很多柜台8000 号柜台就是 FastAPI。 4. /p/10 → 路径 path进到大楼之后往里走p 房间找 10 号柜子。这里10就是路径参数对应前面代码 {article_id} 5. ?page2size20查询参数 query 相当于你走到柜台除了报房间号额外递两张小纸条我要第 2 页每页 20 条。 ? 就是分界线问号前面是去哪问号后面是附加条件。 多个条件用 隔开。 test_main.http# Test your FastAPI endpoints GET http://127.0.0.1:8000/ Accept: application/json ### GET http://127.0.0.1:8000/hello/User Accept: application/json ### POST http://127.0.0.1:8000/login Content-Type: application/json # 告诉服务器body 里面是 JSON 格式数据。FastAPI 自动解析 # 大括号 JSON这一段就是 Body不会出现在浏览器地址栏 URL。 { email: 45139493qq.com, password: 111111111 }