FlaskAPI-路径参数、查询参数

devtools/2024/12/30 23:09:09/

1 路径参数

        在 Flask 中,路径传参是一种常见的传递数据的方式。通过在 URL 路径中指定参数,可以让视图函数根据不同的参数值来返回不同的内容。这种方式可以用于根据用户请求的不同资源(如用户 ID、产品编号等)来提供定制化的响应。

1.1简单路径参数传递

        定义路由时,在路径中使用<参数名>的形式来表示参数。例如,如果你有一个根据用户 ID 显示用户信息的功能,路由可以这样定义:

@app1.get("/user/{id}")
def get(id):print(type(id))return {"message": id}

我们需要注意在路由函数get中需要有一个参数来接受路径传的参数,且要名字一致。

1.2 参数类型指定与其他限制

         Flask 允许指定路径参数的类型。默认情况下,路径参数是字符串类型。如果要指定其他类型,比如整数,可以在参数名后面加上类型转换符。我们修改上面的方法,在传参的位置添加上类型转换。下面是指定参数类型的语法:

latitude:int
@app1.get("/user/{id}")
def get(id:int):print(type(id))return {"message": id}

在 FastAPI 中,可以使用Path函数来对路径参数进行更灵活的限制和设置默认值等操作,以下是具体的使用方法:

基本使用

  • 首先需要从fastapi库中导入Path
from fastapi import APIRouter, Path
  • 然后在定义路由函数的路径参数时,使用Path函数来包裹参数并进行设置。例如:
router = APIRouter()@router.route('/user/{user_id}')
def user_info(user_id: int = Path(..., title="用户ID", description="用户的唯一标识", gt=0)):return f"用户ID为 {user_id} 的信息"
  • 在上述示例中,Path函数中的...表示该参数是必需的,不能省略。titledescription分别为参数添加了标题和描述,这些信息会在自动生成的 API 文档中显示。gt表示该参数必须大于 0,这样就对路径参数user_id进行了更详细的限制和说明。

设置默认值

  • 除了设置必需参数外,还可以使用Path函数设置路径参数的默认值。例如:
@router.route('/product/{product_id}')
def product_info(product_id: int = Path(1, title="产品编号", description="产品的唯一编号", le=100)):return f"产品编号为 {product_id} 的信息"
  • 这里Path函数中的1表示product_id的默认值为 1,同时le表示该参数必须小于等于 100,这样就既设置了默认值又对参数进行了限制。

复杂限制条件

  • 可以同时使用多个限制条件,如gt(大于)、ge(大于等于)、lt(小于)、le(小于等于)等。例如:
@router.route('/range/{num}')
def range_info(num: int = Path(50, title="数字", description="一个在特定范围内的数字", gt=0, lt=100)):return f"数字 {num} 在指定范围内的信息"
  • 此例中,num的默认值为 50,且必须满足大于 0 小于 100 的条件,对路径参数进行了较为复杂的限制。

字符串类型参数的限制

  • 对于字符串类型的路径参数,同样可以使用Path函数进行限制。例如:
@router.route('/string/{text}')
def string_info(text: str = Path(..., title="文本", description="一段特定的文本", min_length=3, max_length=10)):return f"文本 {text} 的信息"
  • 这里要求text参数是必需的,且长度必须在 3 到 10 个字符之间,对字符串路径参数进行了限制。

2 查询参数

        在 Flask API 中,查询参数是 URL 中 “?” 后面的键值对部分,用于向服务器传递额外的信息。这些参数对于筛选、排序、分页等操作非常有用。例如,在一个获取用户列表的 API 中,可以通过查询参数指定只获取特定年龄范围的用户,或者按照用户名字排序。

我们可以直接通过路由函数中的参数来接受传过来的查询参数,如下:

这是请求:http://127.0.0.1:8000/user?id=11&name=‘test’

@app1.get("/user")
def get(id,name):return {"id": id,"name":name}

打开交互式文档,输出如下:

当然,我们还可以通过对函数传的参数进行限定,这与上文介绍的路径传参的限定一样,下文是对上面的补充,我们可以通过Union对传递参数进行限定,也就是id,可以是int,None,str类型。

@app1.get("/user")
def get(id:Union[int,None,str],name):return {"id": id,"name":name}

OptionalOptional类型表示一个变量可以是指定类型的值或者是None。它实际上是Union的一种特殊情况,即Optional[X]等价于Union[X, None]

当然我们也可以同时对类型和默认值或者是传入值进行限定。如下:

@app1.get("/user")
def get(name,id:Union[int,None,str]=Path(None,title="用户id",description="用户id",gt=0)):return {"id": id,"name":name}

参数:name: 用户名称。id: 用户ID,可以是整数、字符串或None,默认值为None,并且使用了FastAPI的Path参数进行描述和验证。

注意,带默认值的参数要放在不带默认值参数后。


http://www.ppmy.cn/devtools/146406.html

相关文章

【SpringMVC】REST 风格

REST&#xff08;Representational State Transfer&#xff0c;表现形式状态转换&#xff09;是一种访问网络资源的格式。传统的资源描述方式通常如下&#xff1a; http://localhost/user/getById?id1http://localhost/user/saveUser 而 REST 风格的描述则更简洁&#xff1a…

45.在 Vue 3 中使用 OpenLayers 鼠标点击播放视频

引言 在 Web 开发中&#xff0c;地图可视化和互动功能是越来越重要的应用场景。OpenLayers 是一个强大的开源 JavaScript 库&#xff0c;用于显示和处理地图数据&#xff0c;支持多种地图服务和交互功能。在这个教程中&#xff0c;我们将介绍如何在 Vue 3 中集成 OpenLayers&a…

自动化测试- 数据驱动测试

数据驱动测试模式 基本概念 数据驱动&#xff08;Data-Driven&#xff09;是一种软件测试和开发方法&#xff0c;强调通过数据来驱动测试用例的执行和结果验证。与传统的硬编码测试用例不同&#xff0c;数据驱动测试允许使用外部数据源&#xff08;如 CSV 文件、Excel 表格、…

4.微服务灰度发布落地实践(消息队列增强)

前言 消息队列是一种用于在应用程序的不同组件或系统之间传递消息的通信机制。它通过将消息存储在一个队列中&#xff0c;确保消息能够可靠地从发送方传递到接收方&#xff0c;即使发送方和接收方不同时在线或处理能力不同。消息队列在现代分布式系统、微服务架构以及异步处理…

如何在 Spring Boot 微服务中设置和管理多个数据库

在现代微服务架构中&#xff0c;通常需要与多个数据库交互的服务。这可能是由于各种原因&#xff0c;例如遗留系统集成、不同类型的数据存储需求&#xff0c;或者仅仅是为了优化性能。Spring Boot 具有灵活的配置和强大的数据访问库&#xff0c;可以轻松配置多个数据库。在本综…

6-Gin 路由详解 --[Gin 框架入门精讲与实战案例]

Gin 是一个用 Go 语言编写的 HTTP Web 框架&#xff0c;以其高性能和简洁的 API 而闻名。它提供了一套强大的路由功能&#xff0c;使得开发者可以轻松地定义 URL 路由规则&#xff0c;并将这些规则映射到具体的处理函数&#xff08;handler&#xff09;。以下是关于 Gin 路由的…

C++:单例模式

创建自己的对象&#xff0c;同时确保对象的唯一性。 单例类只能有一个实例☞静态成员static☞静态成员 必须类外初始化 单例类必须自己创建自己的唯一实例 单例类必须给所有其他对象提供这一实例 静态成员类内部可以访问 构造函数私有化☞构造函数私有外部不能创建&#x…

javaEE

1.maven 1.1 maven是什么&#xff1f; maven 是一个软件全周期管理工具。 1.2 maven vs npm 1.2.1 依赖&#xff08;dependencies&#xff09; 项目中需要对象 常规动作&#xff1a; 引入依赖 1.2.1.1 npm 1.2.1.2 maven 依赖坐标 1.3 maven配置安装 1.3.1 下载maven …