我的问题是使用给定的代码:
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¶m=bbb
我应该期待['a','bbb']的输出除了Flask似乎只接受第一个参数而忽略其余参数。
这是Flask的限制吗?或者是设计?
答案 0 :(得分:68)
您可以使用getlist
,这与Django的getList
类似,但由于某些原因在Flask文档中未提及:
return str(request.args.getlist('param'))
结果是:
[u'a', u'bbb']
如果参数在查询字符串中(如问题中所示),则使用request.args
,如果值来自具有相同名称的多个表单输入,则使用request.form
。 request.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
http://localhost/api/products/filters?Manufacturer=Dell_HP_HUAWEI_Lenovo
http://localhost/api/products/filters?Manufacturer=Dell__HP__HUAWEI__Lenovo