Динамические поля формы в flask.request.form
Я просмотрел документацию, но для жизни я не могу понять, как заполняется объект request.form
в Flask. В документации говорится, что он заполнен обработанными данными формы из запросов POST или PUT, но моя форма динамическая, поэтому я не обязательно знаю, какие поля существуют, когда запрос POST отправлено - хотя я хочу, чтобы я добавлял информацию из этих полей в базу данных.
Некоторые поля в форме всегда есть, но также будет любое количество дополнительных полей из списка около 60. Как я должен выяснить, какие из этих дополнительных полей находятся в запросе, и как следует Я получаю данные от них?
EDIT: моя конкретная проблема решена, но все же стоит спросить, как заполняется словарь request.form. Я обнаружил, что, если флажок не установлен, ключ не добавлен в словарь под его именем, и попытка получить значение ключа, которого не существует из словаря, приводит к довольно запутанному и загадочному HTTP 400 BAD REQUEST
.
Ответы
Ответ 1
request.form
возвращает объект MultiDict
. В основном это означает, что для 1 ключа вы можете иметь несколько значений. Если вы хотите проверить, как выглядит ваша POST-форму, просто выполните оператор быстрой печати следующим образом
f = request.form
for key in f.keys():
for value in f.getlist(key):
print key,":",value
Если вы прочитали документацию для MultiDict, он говорит
"MultiDict является подклассом словаря, настроенным для обработки нескольких значений для одного и того же ключа, который, например, используется функциями синтаксического анализа в оболочках. Это необходимо, потому что некоторые элементы HTML-формы передают несколько значений для одного и того же ключ."
http://werkzeug.pocoo.org/docs/datastructures/#werkzeug.datastructures.MultiDict