在Flask中处理REST API的查询字符串参数 - The Teclado博客

作者:API传播员 · 2025-12-28 · 阅读时间:4分钟

查询字符串参数是REST API中常见的功能,它们通常用于在URL中传递额外的信息。其格式为“name1=value1&name2=value2”,多个值之间使用与号(&)分隔,查询字符串参数与URL的主要部分通过问号(?)隔开。


如何在Flask端点中访问查询字符串值

在Flask中访问查询字符串参数非常简单。Flask 提供了一个名为 request 的代理对象,查询字符串参数存储在 request.args 中,这是一个类似字典的对象。

以下是一个示例端点,它返回数据库中的所有存储信息:

@app.route("/store")
def get_stores():
    return [{"name": store.name, "id": store.id} for store in StoreModel.query.all()]

假如我们希望通过查询字符串参数按名称过滤存储信息,例如用户发送 name=TecAPI 应返回名称以 "Tec" 开头的商店。我们可以通过以下方式获取查询字符串参数值:

from flask import request

@app.route("/store")
def get_stores():
    name = request.args.get("name")
    return [{"name": store.name, "id": store.id} for store in StoreModel.query.filter(StoreModel.name.startswith(name)).all()]

如果需要在商店名称的任何位置搜索指定的值,而不仅仅是以某个值开头,可以使用以下代码:

StoreModel.query.filter(StoreModel.name.like(f"%{name}%")).all()

如何访问查询字符串参数中的值列表

有时,我们需要处理查询字符串中包含多个相同参数名的情况。例如,用户发送以下查询字符串:

?tags=家具&tags=办公室

在Flask中,可以通过 request.args.getlist("tags") 获取所有值:

tags = request.args.getlist("tags")
# 返回 ["家具", "办公室"]

需要注意的是,如果使用 request.args.get("tags"),则只会返回第一个值。

虽然可以通过逗号分隔的方式手动处理多个值,例如:

tags = request.args.get("tags").split(",")

但是这种方法存在潜在问题,例如某些值可能本身包含逗号。因此,推荐使用 .getlist() 方法来处理多个查询字符串参数。


如何在Flask-Smorest资源中访问查询字符串参数

Flask-Smorest 是一个用于构建 REST API 的强大工具,它支持自动生成文档和参数验证。以下是一个示例资源类,它返回数据库中的所有存储信息:

@blp.route("/store")
class StoreList(MethodView):
    @blp.response(200, StoreSchema(many=True))
    def get(self):
        return StoreModel.query.all()

如果需要添加查询字符串参数以按名称筛选存储信息,可以像在普通 Flask 中一样使用 request.args.get()。但 Flask-Smorest 提供了更优雅的方式,通过定义参数模式并使用装饰器进行验证和文档生成。

首先,定义查询字符串参数的模式:

class StoreSearchQueryArgs(BaseSchema):
    name: str | None

然后在资源类中使用 @blp.arguments() 装饰器:

@blp.route("/store")
class StoreList(MethodView):
    @blp.arguments(StoreSearchQueryArgs, location="query")
    @blp.response(200, StoreSchema(many=True))
    def get(self, search_values):
        return StoreModel.query.filter(StoreModel.name.startswith(search_values.get("name", ""))).all()

通过这种方式,Flask-Smorest 不仅能够处理查询字符串参数,还能自动生成 API 文档并进行参数验证。


总结

本文介绍了如何在 Flask 和 Flask-Smorest 中处理查询字符串参数,包括基本的参数获取方法、多值参数的处理方式,以及如何在 Flask-Smorest 中实现参数验证和文档生成。通过这些方法,开发者可以更高效地构建功能强大的 REST API。

如果您对使用 Flask 开发 REST API 感兴趣,可以进一步学习相关课程,深入了解从基础知识到数据库操作、部署和后台任务等内容。

原文链接: https://blog.teclado.com/query-string-arguments-in-flask-rest-apis/