WTForms无法验证NumberRange

时间:2018-10-29 15:02:48

标签: python flask flask-wtforms wtforms

我正在制作一个使用十进制作为输入的WTForm,并且我试图将输入限制为一定范围的数字(介于0和10之间(包括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的最小值和最大值更改为0.010.0。我试过取出消息参数。我尝试取出Optional验证器。但是这些都不阻止我输入表格中超出范围的数字。

(当我将Optional替换为DataRequired时,除非字段中有数据,否则表单将不会提交,因此验证程序至少会起作用。)

有人知道我在做什么错吗?


编辑:看来问题被分为两个部分:不验证,并且验证消息不闪烁。下面的答案解决了缺乏验证的问题。

1 个答案:

答案 0 :(得分:2)

显然您的应用程序配置不正确。代码应如下所示:

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')