什么:我有一个Flask服务器,我想构建一个路由,并通过GET方法传递一个未确定数量的参数。
为什么:我想让用户能够从日期选择器中选择几个日期,并将此列表提供给服务器,该服务器会向我的数据库发出SQL请求以检索相应的数据到用户选择的那些日期。将有数百个文件,我也会尽可能地限制为性能提出的请求/响应的数量。
我对Flask的经验不足,但足以处理以下路线:
@app.route('/photos/year=<int:year>&month=<string:month>', methods=['GET'])
甚至:
@app.route('/photos/<year>.<month>', methods=['GET'])
我有3个案例:
用户可以选择日期间隔,在这种情况下,我会使用&#39; / photos /&lt; dateFrom&GT; _到_&lt; dateTo&gt;&#39; (不含空格);
或单一日期,在这种情况下,我会使用&#39; / photos /&lt;日期&gt;&#39;
或多个日期不一定是连续的,而且我不知道如何处理它,但我会做的事情看起来像这样:& #39; /照片/&LT; DATE1&GT;。&LT; DATE2&GT;。&LT; DATE3&GT; ...&#39; (&#39;?&#39; 代表可选参数; &#39; ...&#39;:代表不确定数量的参数,只是就像在编程语言中一样(实际上这就足够了:&#39; / photos /&lt; date&gt; ...&#39; 如果语法如&#39; ... &#39; 存在)。
我一直在寻找答案但却无法找到答案。唯一可能有趣的是传递一个JSON对象,但是我不知道如何处理这个问题,在得到答案之前我会去看它。如果有帮助的话,我还会看看Flask-RESTful扩展。
任何帮助都将不胜感激。
答案 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参数。