Подтвердить что ты не робот

Получить несколько параметров запроса с тем же именем

Моя проблема в том, что с данным кодом:

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, похоже, принимает только первый параметр и игнорирует остальные.

Является ли это ограничением колкости? Или это по дизайну?

4b9b3361

Ответ 1

Вы можете использовать getlist, который похож на Django getlist, но по какой-либо причине в документации Flask не упоминается:

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

Результат:

[u'a', u'bbb']

Используйте request.args, если параметр находится в строке запроса (как в вопросе), request.form, если значения взяты из нескольких входных форм с тем же именем. request.values объединяет оба, но их следует избегать для более конкретной коллекции.

Ответ 2

Если вы использовали $('form').serialize() в jQuery для кодирования данных формы, вы можете использовать request.form['name'] для получения данных, но учтите, что когда имена нескольких входных элементов совпадают, request.form['name'] получит только первый соответствующий элемент. Поэтому я проверил объект формы из API Flask и нашел этот. Затем я проверил объект MultiDict и обнаружил функцию getlist('name').

Если есть несколько входов с одинаковым именем, попробуйте этот метод: request.form.getlist('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