【发布时间】: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.0 和10.0。我试过取出消息参数。我试过取出Optional 验证器。但这些都不能阻止我在表单中输入超出范围的数字。
(当我将Optional 替换为DataRequired 时,除非字段中有数据,否则表单不会提交,因此验证器至少可以工作。)
有人知道我做错了什么吗?
编辑:似乎问题分为两部分:没有验证,验证消息没有闪烁。下面的答案解决了缺乏验证的问题。
【问题讨论】:
-
some_success_or_other这看起来像什么?自从我使用 WTForms 以来已经有一段时间了,但您似乎没有任何地方可以显示错误消息的输出。我认为它可能会使用 flash() 但我不确定我会看看。 -
@TimThompson 当使用
DataRequired验证器时,无论some_success_or_other看起来如何,都会在页面上闪烁错误消息。 -
您是否在模板中为该错误消息提供了一个位置?
-
@TimThompson。不,好点。当我为它们出现的错误添加位置时。但这仍然是与
DataRequired验证器不同的行为,它不允许提交表单,并且在我不修改问题中显示的 HTML 的情况下闪现错误。
标签: python flask flask-wtforms wtforms