烧瓶 GET - 检索 URL 中不确定数量的参数



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

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

我对 Flask 的经验很少,但足以处理以下路线:

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

甚至:

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

我有3种情况:

  1. 用户可以选择日期间隔,在这种情况下,我会使用像"/photos/_ 到 _">(不带空格)这样的路线;

  2. 单个日期,在这种情况下,我会使用"/photos/<日期>">之类的路线

  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>)

但是,由于在您的情况下,作为参数提供的键可能因请求而异,因此请注意检查您尝试使用的键是否存在于来的请求中。我建议您浏览请求对象的文档以获取更多详细信息。

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

最新更新