2. 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内可以对参数进行描述
效果展示:

  1. 在范围内的参数测试
    在这里插入图片描述
  2. 不在范围内的参数测试 ==>会提示参数不在范围内,不允许通过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试图

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jesse_Kyrie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值