FastAPI筑基_Day7_彻底吃透三大传参方式

📅 2026/8/10 13:20:16
FastAPI筑基_Day7_彻底吃透三大传参方式
【FastAPI筑基-Day7】彻底吃透三大传参方式路径参数、查询参数、Body请求体参数后端99%场景全覆盖专栏FastAPI 零基础后端实战系列标签FastAPI、Python后端、接口传参、路径参数、查询参数、Body请求体前置学习Day6 FastAPI基础GET/POST、Day5 Pydantic一、前言写后端接口核心工作就是接收参数、校验参数、处理逻辑、返回结果。本文说了什么FastAPI 三种参数传递方式——路径参数Path、查询参数Query、请求体参数Body的原理、写法与适用场景。实现了什么一个涵盖四种传参模式的可运行 FastAPI 项目附带完整代码和真实运行结果。目的是什么学完能分清三种参数的区别面对任何后端接口需求一眼就知道该用哪种传参方式。所有 FastAPI 接口传参总共就三类路径参数Path查询参数Query请求体参数BodyDay7 一次性讲透从此再也不会分不清该用哪种参数二、快速区分三种参数必背参数类型位置常用请求方式典型场景路径参数PathURL 路由路径中GET资源ID、详情查询、删除查询参数QueryURL ? 后面拼接GET分页、筛选、搜索、排序请求体Body请求体 JSONPOST/PUT注册、登录、新增、修改复杂数据FastAPI 接口传参路径参数 Path查询参数 Query请求体 Body路由中用变量名动态接收场景资源定位 / 查详情 / 删数据URL ? 后面拼接键值对场景分页 / 搜索 / 筛选 / 排序请求体 JSON 提交场景注册 / 登录 / 新增 / 修改三、路径参数 Path动态路由适用场景定位某一个具体资源根据ID查详情、根据ID删除数据。语法路由中用{变量名}动态接收函数参数名与路由变量名一致即可。fromfastapiimportFastAPI appFastAPI(titleDay7 路径参数)app.get(/user/{user_id})defget_user_detail(user_id:int):return{user_id:user_id,msg:用户详情查询成功}访问地址http://127.0.0.1:8000/user/1001特点参数写在路由路径里不是?后面支持类型自动校验user_id: int传字母会直接报错一般用于唯一资源定位四、查询参数 QueryURL参数适用场景分页、搜索、筛选、时间范围、排序、可选参数。语法路由固定函数参数带默认值FastAPI 自动识别为 Query 参数。app.get(/user/list)defget_user_list(page:int1,size:int10,keyword:str):return{page:page,size:size,keyword:keyword,msg:用户列表查询成功}访问地址http://127.0.0.1:8000/user/list?page2size20keyword张三特点拼接在?后面键值对形式支持默认值、可选参数适合筛选、分页、搜索类可变参数五、请求体参数 BodyJSON参数适用场景提交复杂数据、注册、登录、新增、修改、传递敏感数据。注意GET 不支持 Body只有 POST/PUT 支持。标准写法结合 Pydantic企业级fromfastapiimportFastAPIfrompydanticimportBaseModel appFastAPI()classUserRegister(BaseModel):username:strpassword:strage:int18city:str|NoneNoneapp.post(/user/register)defregister(user:UserRegister):return{code:200,msg:注册成功,data:user.model_dump()}请求格式Postman / 前端直接传 JSON{username:test,password:123456,age:22,city:深圳}特点参数不暴露在地址栏支持复杂结构、嵌套 JSON、大数据Pydantic 自动校验、自动类型转换六、混合传参真实项目高频写法路径参数 查询参数 混用场景根据用户ID查询某一页的订单数据。app.get(/user/{user_id}/order)defget_user_order(user_id:int,page:int1,size:int10):return{user_id:user_id,page:page,size:size,msg:订单查询成功}访问http://127.0.0.1:8000/user/1001/order?page1size5七、三种参数终极总结工作直接照抄查详情、删数据→ 用路径参数 Path查列表、分页、搜索、筛选→ 用查询参数 Query提交表单、新增、修改、复杂数据→ 用请求体 Body八、完整整合代码可直接运行fromfastapiimportFastAPIfrompydanticimportBaseModel appFastAPI(titleDay7 FastAPI三大传参详解)# ---------------------- 1. 查询参数 ----------------------app.get(/user/list)defuser_list(page:int1,size:int10,name:str):return{page:page,size:size,name:name}# ---------------------- 2. 路径参数 ----------------------app.get(/user/{user_id})defuser_detail(user_id:int):return{user_id:user_id,tip:路径参数查询成功}# ---------------------- 3. 请求体参数 ----------------------classUserReg(BaseModel):username:strpassword:strage:int18app.post(/register)defregister(user:UserReg):return{code:200,data:user.model_dump()}# ---------------------- 4. 混合参数 ----------------------app.get(/user/{uid}/goods)defuser_goods(uid:int,page:int1):return{user_id:uid,page:page}if__name____main__:importuvicorn uvicorn.run(app,host0.0.0.0,port8000)运行后访问http://127.0.0.1:8000/docs四种传参接口全部自动罗列在 Swagger 中可直接点 Try it out 在线调试。实际运行结果 GET /user/1001路径参数 {user_id:1001,tip:路径参数查询成功} GET /user/list?page2size20nametest查询参数 {page:2,size:20,name:test} POST /register请求体参数 {code:200,data:{username:test,password:123456,age:22}} GET /user/1001/goods?page3混合参数 {user_id:1001,page:3}四个接口全部返回正确。注意请求体传参时模型未定义的字段如city会被自动忽略Pydantic 只保留模型中声明的字段。九、Day7 学习总结彻底掌握路径参数的适用场景与写法彻底掌握查询参数的分页筛选业务用法彻底掌握Body 请求体的 JSON 提交规范掌握混合传参的企业级开发常用方式99% 的后端接口传参场景全部覆盖十、下期预告Day8FastAPI 参数高级校验——Query、Path、Body 精细化校验、长度/范围/正则、自定义错误信息写出规范工业级接口