WTForms 不验证 NumberRange
WTForms not validating NumberRange
我正在制作一个以小数作为输入的 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
验证器。但是 none 阻止我在表格中输入超出范围的数字。
(当我用 DataRequired
替换 Optional
时,除非该字段中有数据,否则表单不会提交,因此验证器至少起作用了。)
有人知道我做错了什么吗?
编辑:问题似乎分为两部分:无验证和验证消息不闪烁。下面的答案修复了缺乏验证的问题。
显然您的应用程序配置不正确。代码应如下所示:
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')
我正在制作一个以小数作为输入的 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
验证器。但是 none 阻止我在表格中输入超出范围的数字。
(当我用 DataRequired
替换 Optional
时,除非该字段中有数据,否则表单不会提交,因此验证器至少起作用了。)
有人知道我做错了什么吗?
编辑:问题似乎分为两部分:无验证和验证消息不闪烁。下面的答案修复了缺乏验证的问题。
显然您的应用程序配置不正确。代码应如下所示:
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')