Как переопределить html по умолчанию «Пожалуйста, заполните это поле», если проверка во Flask не проходит? - PullRequest
0 голосов
/ 10 июня 2018

У меня есть форма Flask-WTF с DataRequired валидаторами и соответствующими сообщениями об ошибках.Однако браузер Chrome, похоже, игнорирует мои сообщения об ошибках и просто отображает «Пожалуйста, заполните это поле».Как заставить Flask переопределить это и показать мои сообщения?

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired

class SignupForm(FlaskForm):
    first_name = StringField('First Name', validators=[DataRequired(message='Hey, put in your first name!')])
    last_name = StringField('Last Name', validators=[DataRequired("What, you can't remember your last name?")])
    email = StringField('Email', validators=[DataRequired('Gonna need your email address!')])
    password = PasswordField('Password', validators=[DataRequired('Really need a password, Dude!')])
    submit = SubmitField('Sign Up')

1 Ответ

0 голосов
/ 10 июня 2018

Начиная с WTForms 2.2 , атрибут HTML required отображается, когда поле имеет валидатор, который устанавливает флаг «обязательно» .Это позволяет клиенту выполнять некоторые базовые проверки, сохраняя возможность обращения к серверу в обоих направлениях.

Вы должны оставить это браузеру для обработки этого.Сообщения являются стандартными и корректируются в зависимости от локали компьютера пользователя.Существует JavaScript API для управления этими сообщениями (см. Переполнение стека и MDN ), хотя WTForms не обеспечивает никакой интеграции с ним (пока хорошая идея для расширения).

Если вы действительно хотите отключить это, вы можете передать required=False при рендеринге поля.

{{ form.name(required=False) }}

Вместо этого вы можете отключить его для всей формы,переопределение Meta.render_field.

class NoRequiredForm(Form):
    class Meta:
        def render_field(self, field, render_kw):
            render_kw.setdefault('required', False)
            return super().render_field(field, render_kw)

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

class UserForm(NoRequiredForm):
    ...

Вы также можете отключить проверку клиента без значительного изменениякод, установив атрибут novalidate в теге HTML form.

<form novalidate>

</form>

См. обсуждение запроса на добавление, добавив это поведение.

...