57

我的问题是使用给定的代码:

from flask import Flask, request

app = Flask(__name__)

@app.route("/")
def hello():
    return str(request.values.get("param", "None"))

app.run(debug=True)

我访问:

http://localhost:5000/?param=a&param=bbb

我应该期待 ['a', 'bbb'] 的输出,除了 Flask 似乎只接受第一个参数而忽略其余参数。

这是 Flask 的限制吗?还是设计使然?

4

4 回答 4

106

您可以使用getlist,它类似于 Django 的getList,但由于某种原因在 Flask 文档中未提及:

return str(request.args.getlist('param'))

结果是:

[u'a', u'bbb']

如果request.args参数在查询字符串中(如问题中),request.form如果值来自具有相同名称的多个表单输入,则使用。 request.values两者结合,但通常应避免用于更具体的集合。

于 2013-01-07T00:56:01.420 回答
4

如果你$('form').serialize()在 jQuery 中对表单数据进行编码,你可以使用它request.form['name']来获取数据,但请注意,当多个输入元素的名称相同时,request.form['name']只会获取第一个匹配的项目。所以我从 Flask API 检查了表单对象,我发现了这个. 然后我检查了MultiDict 对象,我找到了函数getlist('name')

如果有多个同名输入,请尝试以下方法:request.form.getlist('name')

于 2016-08-16T09:38:32.043 回答
3

另一种选择是使用带有 request.args 的平面 json 结构。因为有时你根本不知道参数,你不能使用.getlist().

arguments = request.args.to_dict(flat=False)

# Get a specific parameter
param = arguments.get('param')
print(param)

# Get all the parameters that have more than one value
for field, values in arguments.items():
    if len(values) > 1:
        print(values)
于 2020-03-06T09:05:15.763 回答
-3

另一种方法是您可以使用一个键和一个包含多个值的值,然后在服务器中您可以拆分并做任何您想做的事情。希望这对某人有帮助

http://localhost/api/products/filters?Manufacturer=Dell|HP|HUAWEI|Lenovo

或者

http://localhost/api/products/filters?Manufacturer=Dell_HP_HUAWEI_Lenovo

或者

http://localhost/api/products/filters?Manufacturer=Dell__HP__HUAWEI__Lenovo
于 2017-09-12T10:19:50.097 回答