WTForms не проверяет NumberRange - PullRequest
       24

WTForms не проверяет NumberRange

0 голосов
/ 29 октября 2018

Я делаю WTForm, которая принимает десятичные числа в качестве входных данных, и я пытаюсь ограничить входные данные диапазоном чисел (от 0 до 10 включительно). Однако валидатор NumberRange, похоже, ничего не делает.

Python (с использованием колбы):

from flask import render_template
from flask_wtf import FlaskForm
from wtforms import DecimalField, SubmitField, validators

class NumberForm(FlaskForm):
    question = DecimalField('Question 1',
                            [validators.NumberRange(min=0, max=10, message="blah"),
                             validators.Optional()])
    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.label }}
    <div>
      {{ form.question }}
    </div>
  </div>
  <div class="form-group-row">
    {{ form.submit }}
  </div>
</form>

В поле question будет отправлено любое введенное мной значение. Я думал, что он не разрешит текст и не допустит отрицательных чисел, ни чисел вне диапазона (например, 10000).

Я пытался изменить NumberRange min и max на 0.0 и 10.0. Я попытался убрать аргументы сообщения. Я пытался убрать валидатор Optional. Но ничто из этого не мешает мне выйти за пределы диапазона номеров в форме.

(Когда я заменил Optional на DataRequired, форма не будет отправлена, если в поле не было данных, так что валидатор работал как минимум.)

Кто-нибудь знает, что я делаю не так?


Редактировать: кажется, что проблема была разделена на две части: нет проверки и сообщения проверки не мигают. Ответ ниже исправляет отсутствие проверки.

1 Ответ

0 голосов
/ 29 октября 2018

Видимо ваше приложение настроено неправильно. Код должен выглядеть так:

from flask_wtf import FlaskForm
from wtforms import SubmitField, DecimalField
from wtforms.validators import NumberRange

class NumberForm(FlaskForm):
    question = DecimalField('Question 1', validators=[NumberRange(min=0, max=10, message='bla')])
    submit = SubmitField('Submit')
...