FastAPI路径参数详解
创作时间:
作者:
@小白创作中心
FastAPI路径参数详解
引用
CSDN
1.
https://m.blog.csdn.net/Jesse_Kyrie/article/details/141314553
FastAPI是一个现代、快速(高性能)的Web框架,用于构建APIs,基于Python 3.7+的类型提示。本文将详细介绍FastAPI中路径参数的使用方法,包括基本声明、类型限制、高级限制以及特殊场景的处理。
FastAPI 使用 Python 字符串格式化语法声明路径参数(变量)
示例1
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")# 使用{}接收路径参数
async def read_item(item_id):
return {"path arg ==> item_id": item_id}
示例1结果
Swagger页面展示
FastAPI 对路径参数类型的支持
在试图函数内,指定参数的类型,对应的Swagger展示的页面就会对测试的参数类型进行限制,不符合规则的请求参数会被过滤,不允许发送到后端,减少因为参数类型引起的测试与开发问题。
参数类型限制
示例2 【符合【不符合】条件的参数测试情况】
@app.get("/argsTypeLimit/{item_id}")
async def read_item(item_id: int): # int类型限制
return {"path arg ==> item_id": item_id}
由于试图函数限制了路径参数item_id的类型,Swagger测试页面则会相应得限制请求的发送,过滤不合理请求【不符合条件的请求不会发送到后端】。如下展示了符合条件的参数与不符合条件的参数测试情况。
符合条件的参数:
不符合条件的参数:
使用Path类高级限制
示例3 【限制Swagger传入的数字范围】
目标:在路由/path_/后传递一个路径参数,同时限制参数为数字,参数范围1-10之间
实现方案:使用FastAPI内的Path方法校验参数
实现代码:
from fastapi import FastAPI,Path
@app.get("/path_/{num}") # 指定数字
def path_params_validate(
num: int = Path(..., description="数字路径参数接口测试", ge=1, le=10),
):# description为参数描述,ge为大于等于,le为小于等于
return num
解释:使用Path方法处理数字类型的参数,可以限制参数的范围,同时在API内可以对参数进行描述
效果展示:
- 在范围内的参数测试
- 不在范围内的参数测试 ==>会提示参数不在范围内,不允许通过API测试接口
枚举类型的参数使用
以下方法主要用于为Swagger测试接口提供选择框,便于前后端交互与接口测试
from enum import Enum
# 导入枚举类 Enum,用于定义一组有名称的常量
class CityName(str, Enum):
Beijing = "Beijing China"
Shanghai = "Shanghai China"
# 定义一个枚举类 CityName,继承自 Enum,并且使每个枚举值都是字符串
# 这个枚举类包含了两个城市的名称:Beijing 和 Shanghai
@app.get("/enum/{city}")
# 使用 FastAPI 定义一个 GET 请求的路径操作函数,它的路径为 /enum/{city}
# {city} 是一个路径参数,表示用户可以传入的城市名
async def latest(city: CityName):
# 定义一个异步函数 latest,它接收一个参数 city,其数据类型为定义好的 CityName 枚举类
if city == CityName.Shanghai:
return {"city_name": city, "confirmed": 1492, "death": 7}
# 如果传入的 city 是上海,则返回一个包含城市名称、确诊人数、和死亡人数的字典
if city == CityName.Beijing:
return {"city_name": city, "confirmed": 971, "death": 9}
# 如果传入的 city 是北京,则返回一个包含城市名称、确诊人数、和死亡人数的字典
return {"city_name": city, "latest": "unknown"}
# 如果传入的 city 既不是北京也不是上海,则返回一个包含城市名称和“未知”信息的字典
效果展示:
路径参数内含有"/"处理【当前后端开发场景很少遇到】
在不做任何设置之前,框架会将参数中的/当作路径来解析,结果可能导致匹配不到正确路径,引起404报错。
不对参数处理做设置之前可能发生如下情况:
我们需要实现的功能:将参数作为字符串来处理,忽略了其中的关键字符"/"
实现代码:
@app.get("/files/{file_path:path}") # 通过指定装饰器内的参数类型为path,将/files/后的所有数据作为字符串处理
def filepath(file_path: str):
return f"The file path is {file_path}"
通过以上方式,将/files/后的参数作为字符串处理,使其匹配到对应的filepath试图
热门推荐
湖州钮氏宗祠:一座承载百年历史的状元旧宅
人民币汇率变动如何影响黄金价格?
中国人为什么一定要看春晚?那是不可或缺的年味与文化传承
现代发动机逆袭用户口碑,你get了吗
国产发动机真的超越合资了吗?从数据看真相
本田VTEC技术详解:智能可变气门正时与升程电子控制系统
重庆本科毕业生的就业前景分析
如何了解特定地区的自然环境?这种了解对居住选择有何帮助?
春节走亲访友,如何优雅应对“中国式逗娃”
秋冬季节,来一场桂林漓江精华段骑行之旅!
四川生日宴席:精选特色菜品推荐
周末逃离城市:桂林阳朔历史文化游
你的发质适合哪种洗发水?专家揭秘!
大豆油精炼设备工艺流程详解
1分钟了解食用油成分和储藏方式,远离变质风险!
从100多版到爆红:《哪吒之魔童降世》形象设计揭秘
近视手术后为什么要定期复查?这份术后护理指南请收好
从经典到表情包:《哪吒之魔童降世》的蜕变之路
《九重紫》CP感爆棚,恋爱脑们狂喜!
从凯源到山河令:中国CP文化的崛起之路
如何处理家庭矛盾?七大实用解决方案
碎片时间也能瘦!科学解读碎片化运动减脂法
王岚教你一周科学减脂训练
科学设定健身目标:一周减脂不掉队!
科学减重:一周瘦10斤的饮食与运动指南
让孩子爱上阅读的六种方式,做到一种就很了不起
小学生漫画图书推荐,让阅读成为孩子的乐趣
水培植物用水指南:纯净水、自来水、凉白开、雨水、河水哪个更适合?
阿拉伯使用什么货币?这种货币在国际交易中有何地位?
浪漫海南:情侣专属旅游指南与浪漫打卡地全攻略