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

Динамические поля формы в flask.request.form

Я просмотрел документацию, но для жизни я не могу понять, как заполняется объект request.form в Flask. В документации говорится, что он заполнен обработанными данными формы из запросов POST или PUT, но моя форма динамическая, поэтому я не обязательно знаю, какие поля существуют, когда запрос POST отправлено - хотя я хочу, чтобы я добавлял информацию из этих полей в базу данных.

Некоторые поля в форме всегда есть, но также будет любое количество дополнительных полей из списка около 60. Как я должен выяснить, какие из этих дополнительных полей находятся в запросе, и как следует Я получаю данные от них?

EDIT: моя конкретная проблема решена, но все же стоит спросить, как заполняется словарь request.form. Я обнаружил, что, если флажок не установлен, ключ не добавлен в словарь под его именем, и попытка получить значение ключа, которого не существует из словаря, приводит к довольно запутанному и загадочному HTTP 400 BAD REQUEST.

4b9b3361

Ответ 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