2013-07-19 2 views
11

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

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

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

+0

Какие значения отображаются в request.form, зависит от данных, которые отправляет браузер. Решение не отправлять ключ, если флажок снят, производится браузером, а не флягой. –

+0

Я думаю, что лучше всего открыть новые вопросы по новым вопросам. –

ответ

19

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

+0

Я бы хотел сказать (внести свой вклад), что на первый взгляд немного сложно понять, как анализируется 'request.form', как обычный словарь Python (хотя он возвращает своего рода' dict' с 'tuples', если вы попытаетесь напечатать' f'), но ответ имеет большой смысл, особенно в отношении примера, а также определения Flask MultiDict. Большое спасибо, #codegeek :). – ivanleoncz

Смежные вопросы