请求数据(路由、body)

发布时间:2026/10/29 17:44:44
请求数据(路由、body) 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 }

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询