获取同名的多个请求参数

时间:2013-01-07 00:48:42

标签: python flask

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

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的限制吗?或者是设计?

3 个答案:

答案 0 :(得分:68)

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

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

结果是:

[u'a', u'bbb']

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

答案 1 :(得分:1)

另一个选择是对request.args使用平面json结构。因为有时您只是根本不知道该参数,所以无法使用.getlist()

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

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

# Get all the parameters that have more than one value
for field, values in arguments.items():
    if len(values) > 1:
        print(values)

答案 2 :(得分:-1)

  

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

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

OR

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

OR

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