Get multiple request params of the same name

前端 未结 4 951
醉话见心
醉话见心 2020-11-30 06:10

My problem is that with the given code:

from flask import Flask, request

app = Flask(__name__)

@app.route(\"/\")
def hello():
    return str(request.values         


        
相关标签:
4条回答
  • 2020-11-30 06:45

    If you used $('form').serialize() in jQuery to encode your form data, you can use request.form['name'] to get data, but note that when multiple input elements' names are the same, request.form['name'] will only get the first matched item. So I checked the form object from the Flask API, and I found this. Then I checked the MultiDict object, and I found the function getlist('name').

    If there are multiple inputs with the same name, try this method: request.form.getlist('name')

    0 讨论(0)
  • 2020-11-30 06:56

    You can use getlist, which is similar to Django's getList but for some reason isn't mentioned in the Flask documentation:

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

    The result is:

    [u'a', u'bbb']
    

    Use request.args if the param is in the query string (as in the question), request.form if the values come from multiple form inputs with the same name. request.values combines both, but should normally be avoided for the more specific collection.

    0 讨论(0)
  • 2020-11-30 07:01

    Another option is to use a flat json structure with request.args. Because sometimes you simply do not know the parameter beforehand and you cannot use .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)
    
    0 讨论(0)
  • 2020-11-30 07:05

    One more way is that you can use one key and one value that holds multiple values and then in the server you can split and do what ever you want .Hope this Helps somewone

    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
    
    0 讨论(0)
提交回复
热议问题