【问题标题】:WTForms not validating NumberRangeWTForms 不验证 NumberRange
【发布时间】:2019-04-02 13:11:12
【问题描述】:

我正在制作一个将小数作为输入的 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 的最小值和最大值更改为0.010.0。我试过取出消息参数。我试过取出Optional 验证器。但这些都不能阻止我在表单中输入超出范围的数字。

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

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


编辑:似乎问题分为两部分:没有验证,验证消息没有闪烁。下面的答案解决了缺乏验证的问题。

【问题讨论】:

  • some_success_or_other 这看起来像什么?自从我使用 WTForms 以来已经有一段时间了,但您似乎没有任何地方可以显示错误消息的输出。我认为它可能会使用 flash() 但我不确定我会看看。
  • @TimThompson 当使用DataRequired 验证器时,无论some_success_or_other 看起来如何,都会在页面上闪烁错误消息。
  • 您是否在模板中为该错误消息提供了一个位置?
  • @TimThompson。不,好点。当我为它们出现的错误添加位置时。但这仍然是与 DataRequired 验证器不同的行为,它不允许提交表单,并且在我不修改问题中显示的 HTML 的情况下闪现错误。

标签: python flask flask-wtforms wtforms


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 2019-05-10
    • 2021-08-09
    • 2014-02-05
    相关资源
    最近更新 更多