【发布时间】:2019-09-12 20:57:33
【问题描述】:
我正在尝试将逗号分隔的查询参数传递给 Flask 端点。
一个示例 URI 将是:
localhost:3031/someresource#?status=1001,1002,1003
查看request.args 或request.args.getlist('status') 的返回,我看到我只得到一个字符串。
ipdb> pp request.args
ImmutableMultiDict([('status', '1001,1002,1003')])
ipdb> request.args.getlist('status')
['1001,1002,1003']
我知道我可以用逗号分割字符串,但这感觉很笨拙。在 Flask 中是否有更惯用的方法来处理这个问题?还是我的查询参数格式错误?
解决方案
由于 Flask 不直接支持逗号分隔的查询参数,因此我将它放在我的基本控制器中以支持所有端点上的逗号分隔或重复查询参数。
request_data = {}
params = request.args.getlist('status') or request.form.getlist('status')
if len(params) == 1 and ',' in params[0]:
request_data['status'] = comma_separated_params_to_list(params[0])})
else:
request_data['status'] = params
def comma_separated_params_to_list(param):
result = []
for val in param.split(','):
if val:
result.append(val)
return result
【问题讨论】:
-
AFAIK 查询参数只是键/值对。我会把它分开。另一种选择是将请求正文作为 json 发送并在后端解析