Flask GET - 在 URL 中检索未确定数量的参数

Posted

技术标签:

【中文标题】Flask GET - 在 URL 中检索未确定数量的参数【英文标题】:Flask GET - Retrieve an undetermined number of parameters in the URL 【发布时间】:2018-06-23 21:15:06 【问题描述】:

什么:我有一个 Flask 服务器,我想构建一个路由并通过 GET 方法向它传递一个不确定数量的参数。

为什么:我想让用户能够从日期选择器中选择几个日期,并将此列表提供给服务器,服务器将向我的数据库发出 SQL 请求以检索相应的数据到用户选择的那些日期。会有数百个文件,我也会尽可能限制为提高性能而发出的请求/响应的数量。

我对 Flask 几乎没有经验,但足以处理以下路线:

@app.route('/photos/year=<int:year>&month=<string:month>', methods=['GET'])

甚至:

@app.route('/photos/<year>.<month>', methods=['GET'])

我有 3 个案例:

    用户可以选择日期间隔,在这种情况下,我会使用 '/photos/ _ to _ 这样的路线'(无空格);

    单一日期,在这种情况下,我会使用 '/photos/'

    之类的路线

    多个日期非连续的,我不知道如何处理它,但我会做的看起来像这样:'/photos /.?.?...' ('?': 表示可选参数;'...': 表示不确定数量的参数,就像在编程语言中一样(实际上这已经足够了:'/photos/...' 如果存在类似 '...' 的语法)。

我一直在寻找答案,但找不到任何东西。唯一可能有趣的是传递一个 JSON 对象,但我不知道如何处理它,我会寻找它,直到我得到答案。如果有帮助,我也会看看 Flask-RESTful 扩展。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我认为三个用例不需要单独的路由。您可能希望有一个 GET 路由并接收日期作为 url 参数。

在这种情况下,您的烧瓶路线将变为:

@app.route('/photos', methods=['GET'])

您现在可以将 url 中的任何键值对传递为

/photos?date1=1&date2=2

您可以使用

访问这些参数
from flask import request
date1 = request.args.get('date1')
date2 = request.args.get('date2')

如果您想要日期列表,只需使用 URL 中的相同键发送它们并使用

request.args.getlist(<paramname>)

但是,由于在您的情况下,作为参数出现的密钥可能因请求而异,因此请注意检查您尝试使用的密钥是否存在于发出的请求中。我建议您通过请求对象的documentation 了解更多详细信息。

但是,作为一般做法,如果您的参数更复杂,您可以考虑使用 JSON 对象作为有效负载而不是 URL 参数。

【讨论】:

感谢您的回答@penguin2048,它对我帮助很大。您知道通过 Flask 服务器发送多个文件的解决方案吗?我只知道可以返回单个文件的“send_file”方法,以及 zip 文件方法,但我想做的是在我的 Ionic 应用程序中编写的特定模板中向用户显示几张照片。在这种情况下,我可能必须为每张照片指定一个请求...否则我可以使用 render_template 方法来显示我的照片(这可行吗?),但我将无法使用 Ionic 中的元素应用程序,这是必需的。 通过烧瓶服务器发送照片进行渲染不是要走的路。您通常希望返回图像的 URL(存储在云端)并直接在客户端加载它们。

以上是关于Flask GET - 在 URL 中检索未确定数量的参数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PyMongo 基于 Flask URL 变量检索 MongoDB 中的记录?

求助如何在 flask 中访问未定义的 url 时重定向到其他页面

变量未显示在 Flask 模板中

使用 jQuery mobile 在 Flask 中调用重定向(url_for('xxx'))后浏览器中的 URL 未更新

使用flask传递http请求

flask小例