Поле формы PasswordField
Класс PasswordField применяется для создания
поля ввода пароля в формах Flask-WTF. Это
наследник класса StringField, который при
рендеринге создаёт HTML-тег input с атрибутом
type="password". Первым параметром передаётся
подпись поля, остальные параметры совпадают
с параметрами StringField.
В отличие от обычного текстового поля, браузер скрывает вводимые символы точками или звёздочками. Это предотвращает подглядывание пароля посторонними людьми.
Синтаксис
from wtforms import PasswordField
field = PasswordField(label, [validators], **kwargs)
Пример
Давайте создадим простую форму с полем пароля:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import PasswordField, SubmitField
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class LoginForm(FlaskForm):
password = PasswordField('Password')
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = LoginForm()
if form.validate_on_submit():
return form.password.data
return render_template('index.html', form=form)
Давайте выведем форму в шаблоне:
<form method="post">
{{ form.hidden_tag() }}
<p>{{ form.password.label }} {{ form.password() }}</p>
<p>{{ form.submit() }}</p>
</form>
В браузере поле пароля будет отображаться с скрытыми символами:
<form method="post">
<p><label>Password</label> <input type="password" name="password"></p>
<p><input type="submit" value="Send"></p>
</form>
Результат выполнения кода после отправки формы:
"abcde"
Пример
Давайте добавим валидатор обязательного заполнения поля:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import PasswordField, SubmitField
from wtforms.validators import DataRequired, Length
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class LoginForm(FlaskForm):
password = PasswordField('Password', [
DataRequired(),
Length(min=5)
])
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = LoginForm()
if form.validate_on_submit():
return form.password.data
return render_template('index.html', form=form)
Давайте выведем ошибки валидации в шаблоне:
<form method="post">
{{ form.hidden_tag() }}
<p>{{ form.password.label }} {{ form.password() }}</p>
{% for error in form.password.errors %}
<p>{{ error }}</p>
{% endfor %}
<p>{{ form.submit() }}</p>
</form>
Если пароль короче 5 символов, будет выведено сообщение об ошибке.
Смотрите также
-
класс
Form,
который создаёт форму -
поле
StringField,
которое создаёт текстовое поле -
валидатор
DataRequired,
который требует обязательного заполнения -
метод
validate_on_submit,
который проверяет отправку формы