我正在制作一个使用十进制作为输入的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.0
和10.0
。我试过取出消息参数。我尝试取出Optional
验证器。但是这些都不阻止我输入表格中超出范围的数字。
(当我将Optional
替换为DataRequired
时,除非字段中有数据,否则表单将不会提交,因此验证程序至少会起作用。)
有人知道我在做什么错吗?
编辑:看来问题被分为两个部分:不验证,并且验证消息不闪烁。下面的答案解决了缺乏验证的问题。
答案 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')