Flask GET - 在URL

时间:2018-01-15 08:56:22

标签: python flask get parameter-passing url-parameters

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

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

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

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

甚至:

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

我有3个案例:

  1. 用户可以选择日期间隔,在这种情况下,我会使用&#39; / photos /&lt; dateFrom&GT; _到_&lt; dateTo&gt;&#39; (不含空格);

  2. 单一日期,在这种情况下,我会使用&#39; / photos /&lt;日期&gt;&#39;

  3. 多个日期不一定是连续的,而且我不知道如何处理它,但我会做的事情看起来像这样:& #39; /照片/&LT; DATE1&GT;。&LT; DATE2&GT;。&LT; DATE3&GT; ...&#39; &#39;?&#39; 代表可选参数; &#39; ...&#39;:代表不确定数量的参数,只是就像在编程语言中一样(实际上这就足够了:&#39; / photos /&lt; date&gt; ...&#39; 如果语法如&#39; ... &#39; 存在)。

  4. 我一直在寻找答案但却无法找到答案。唯一可能有趣的是传递一个JSON对象,但是我不知道如何处理这个问题,在得到答案之前我会去看它。如果有帮助的话,我还会看看Flask-RESTful扩展。

    任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

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

HasFieldNames

您现在可以在网址中传递任何键值对

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

您可以使用

访问这些参数
/photos?date1=1&date2=2

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

from flask import request
date1 = request.args.get('date1')
date2 = request.args.get('date2')

但是,在您的情况下,作为参数的密钥可能因请求而异,请注意检查您尝试使用的密钥是否存在于请求中。我建议您查看请求对象的documentation以获取更多详细信息。

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