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

Flask GET - Retrieve an undetermined number of parameters in the URL

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

WHY: 我想让用户能够从日期选择器中选择多个日期,并将此列表提供给服务器,这将使 SQL 请求我的数据库检索与用户选择的那些日期相对应的数据。会有数百个文件,我也会尽可能地限制 requests/responses 的数量。

我对 Flask 的经验很少,但足以处理像这样的路由:

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

甚至:

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

我有 3 个案例:

  1. 用户可以选择日期间隔,在这种情况下我会使用 '/photos/ 这样的路线< dateFrom> _ to _< dateTo>' (没有空格);

  2. 单一日期 ,在这种情况下,我会使用像 '/photos/< date >'[=53 这样的路线=]

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

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

如有任何帮助,我们将不胜感激。

我认为没有必要为三个用例设置单独的路由。您可能希望有一个 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 参数。