【问题标题】:Get multiple request params of the same name获取多个同名请求参数
【发布时间】:2012-12-20 17:45:08
【问题描述】:

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

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 的限制吗?还是设计使然?

【问题讨论】:

    标签: python flask


    【解决方案1】:

    另一种选择是使用带有 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)
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这很好用,除了它实际上是request.form.getlist('list_name')。请更改括号。
      【解决方案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
      

      【讨论】:

        【解决方案4】:

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

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

        结果是:

        [u'a', u'bbb']
        

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

        【讨论】:

        猜你喜欢
        • 2022-01-04
        • 2012-12-09
        • 2010-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-23
        相关资源
        最近更新 更多