2016-06-19 5 views
0

Я использую форму для получения данных из почтового запроса, и я заметил некоторое поведение, с которым я не знаком. У меня есть две версии моей формы, показанные ниже. Единственное отличие заключается в том, что во второй версии формы у меня есть символ подчеркивания в именах переменных.Поле формы с подчеркиванием не работает

class EditTitleForm(Form): 
    newTitle = StringField('newTitle') 
    currentTitle = StringField('currentTitle') 

class EditTitleForm(Form): 
    new_title = StringField('newTitle') 
    current_title = StringField('currentTitle') 

Однако, когда я пытаюсь print(form.new_title.data) и print(form.current_title.data) я получаю пустую строку, но когда я переключаю форму версии без подчеркивания, все печатает отлично. Почему это?

@auth.route('/edit_title', methods=['POST']) 
def edit_title(): 
    data = MultiDict(mapping=request.json) 
    print(data) 
    form = EditTitleForm(data) 
    print(form.newTitle.data) 
    print(form.currentTitle.data) 
+0

Это WTForms или что-то еще? Если это WTForms, то подчеркивающая форма должна работать (см., Например, http://wtforms.readthedocs.io/en/latest/forms.html#defining-forms), и вы должны поднять ошибку. – jonrsharpe

+0

Да, его WTForms – Brosef

+0

Вы также изменили ключи в объекте JSON? Установка меток не влияет на то, что загружается в каждое поле. – davidism

ответ

0

Названия полей соответствуют ключам в считываемых данных. Если вы меняете имена полей, вам также необходимо изменить ключи в данных JSON. Установка метки (первый аргумент в поле) не влияет на это, это используется только при визуализации полей как HTML.

# if attribute name is new_title 
new_title = StringField() 

# then data key must be new_title as well 
data = { 
    "new_title": "Stack Overflow" 
} 

WTForms может работать с JSON, но если вы хотите что-то больше подходит для этого, попробуйте Marshmallow или другую библиотеку сериализации.

+0

Интересно. Я не знал, что отношения существуют между именами ключей и полей. Спасибо. – Brosef