Метод process_formdata
Метод process_formdata применяется к экземпляру
поля Field и вызывается автоматически,
когда WTForms получает данные из формы. Первым
параметром передаётся список значений
valuelist, полученных из запроса. Метод
преобразует сырые строки в нужный тип данных
и сохраняет результат в атрибут data.
По умолчанию базовый метод просто записывает
первое значение из списка в data. В
дочерних классах, например IntegerField
или BooleanField, метод переопределяется
для приведения значения к соответствующему типу.
Синтаксис
def process_formdata(self, valuelist):
# обработка данных
Пример
Давайте создадим собственное поле, которое переводит строку в верхний регистр при обработке данных формы:
from flask import Flask, render_template, request
from wtforms import Form, Field
app = Flask(__name__)
app.secret_key = 'secret'
class UpperField(Field):
def process_formdata(self, valuelist):
if valuelist:
self.data = valuelist[0].upper()
else:
self.data = ''
class MyForm(Form):
text = UpperField('Text')
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm(request.form)
res = ''
if request.method == 'POST' and form.validate():
res = form.text.data
return render_template('index.html', form=form, res=res)
Шаблон для вывода формы и результата:
<form method="post">
{{ form.text() }}
<input type="submit">
</form>
<p>{{ res }}</p>
Если отправить в поле строку 'abcde',
результат выполнения кода будет:
ABCDE
Пример
Давайте обработаем список значений и сохраним
его в атрибут data как список:
from flask import Flask, render_template, request
from wtforms import Form, Field
app = Flask(__name__)
app.secret_key = 'secret'
class ListField(Field):
def process_formdata(self, valuelist):
if valuelist:
self.data = valuelist
else:
self.data = []
class MyForm(Form):
items = ListField('Items')
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm(request.form)
res = []
if request.method == 'POST' and form.validate():
res = form.items.data
return render_template('index.html', form=form, res=res)
Шаблон с полем множественного выбора:
<form method="post">
<select name="items" multiple>
<option value="a">a</option>
<option value="b">b</option>
<option value="c">c</option>
</select>
<input type="submit">
</form>
<p>{{ res }}</p>
Если выбрать варианты 'a' и 'b',
результат выполнения кода будет:
['a', 'b']
Смотрите также
-
класс
Field,
который представляет поле формы -
метод
process_data,
который обрабатывает данные из объекта формы -
атрибут
data,
который хранит обработанное значение поля -
атрибут
raw_data,
который хранит исходные данные из формы