Получить несколько параметров запроса с тем же именем
Моя проблема в том, что с данным кодом:
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, похоже, принимает только первый параметр и игнорирует остальные.
Является ли это ограничением колкости? Или это по дизайну?
Ответы
Ответ 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