Этот вопрос относится к этому вопросу , но фокусируется на одной из основных проблем, о которых я не знал, когда задавал этот другой вопрос.
Я использую Python, Flask и WTForms для создания формы. Вот этот питон:
from flask import render_template
from flask_wtf import FlaskForm
from wtforms import DecimalField, SubmitField
from wtforms.validators import NumberRange, DataRequired
class NumberForm(FlaskForm):
question_one = DecimalField('Question 1', validators=[NumberRange(min=0, max=10)])
question_two = DecimalField('Question 2', validators=[DataRequired()])
submit = SubmitField('Submit')
@app.route('some_route/', methods=['GET', 'POST'])
def page():
form = NumberForm()
if form.validate_on_submit():
return some_success_or_other
return render_template('page.html', form=form)
И HTML:
<form method="POST">
<div class="form-group-row">
{{ form.hidden_tag() }}
{{ form.question_one.label }}
<div>
{{ form.question_one }}
</div>
</div>
<div class="form-group-row">
{{ form.question_two.label }}
<div>
{{ form.question_two }}
</div>
</div>
<div class="form-group-row">
{{ form.submit }}
</div>
</form>
Два используемых мной валидатора (NumberRange
и DataRequired
) ведут себя по-разному. Если данные не введены в поле 2 и нажата кнопка отправки, форма не отправляется, а рядом с полем появляется сообщение об ошибке «Пожалуйста, заполните это поле».
Если в поле 1 представлены строки (а не десятичные дроби) или числа вне диапазона, форма отправляется при нажатии кнопки.
Хотя ошибка регистрируется (и может быть показана с помощью {{ form.errors }}
, я хотел, чтобы для обоих валидаторов было одинаковое поведение - я бы хотел, чтобы форма не отправлялась при вводе недопустимых чисел / строк в поле 1.
Кто-нибудь знает, почему валидаторы ведут себя по-разному?