消息在某些 WTForm 验证方法中不闪烁
Message not flashing on some WTForm validation methods
这个问题与 有关,但重点是我在问另一个问题时不知道的一个潜在问题。
我正在使用 Python、Flask 和 WTForms 制作表格。这是 python:
from flask import render_template
from flask_wtf import FlaskForm
from wtforms import DecimalField, SubmitField
from wtforms.validators import NumberRange, DataRequired
class NumberForm(FlaskForm):
question_one = DecimalField('Question 1', validators=[NumberRange(min=0, max=10)])
question_two = DecimalField('Question 2', validators=[DataRequired()])
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_one.label }}
<div>
{{ form.question_one }}
</div>
</div>
<div class="form-group-row">
{{ form.question_two.label }}
<div>
{{ form.question_two }}
</div>
</div>
<div class="form-group-row">
{{ form.submit }}
</div>
</form>
我使用的两个验证器(NumberRange
和 DataRequired
)的行为不同。如果未在字段 2 中输入数据并单击提交按钮,则不会提交表单,并且会在字段旁边弹出一条错误消息,显示 "Please fill in this field".
当在字段 1 中提交字符串(而不是小数)或超出范围的数字时,按下按钮时表单会提交。
尽管错误已记录(并且可以使用 {{ form.errors }}
显示),但我希望两个验证器具有相同的行为 - 我希望在字段 1 中输入无效 numbers/strings 时阻止提交表单。
有人知道为什么验证者的行为不同吗?
HTML5 引入了 required 属性,如果其中一个字段(受此属性影响)尚未被验证,则必须填写字段并阻止表单验证人口稠密;此属性仅适用于输入标签。
使用flask-wtf,当你使用带有required验证器的字段时,它会自动生成一个带有required属性的html字段,这将阻止从被发送并显示信息的形式。
在NumberRange
等其他验证器的情况下,就不一样了。
与纯HTML:
要具有相同的行为,即检查输入的数字是否在明确定义的范围内,如果不是这样则阻止发送表单,有必要使用 pattern 属性(更多细节here)。对于这种特殊情况没有预定义模式,因此您需要使用 正则表达式 创建自定义模式。它将给出:<input type="text" pattern="[0-9]">
.
现在我们只需要用 wtforms 重新采用相同的逻辑...
使用 wtforms:
<form method="POST">
<div class="form-group-row">
{{ form.hidden_tag() }}
{{ form.question_one.label }}
<div>
{{ form.question_one(pattern="[0-9]") }}
</div>
</div>
<div class="form-group-row">
{{ form.question_two.label }}
<div>
{{ form.question_two }}
</div>
</div>
<div class="form-group-row">
{{ form.submit }}
</div>
</form>
在第 {{ form.question_one(pattern="[0-9]") }}
行,我使用带有正则表达式的模式属性来检查输入的数字是否在 0 到 9 的范围内。对于更大的范围,您需要多写一些正则表达式复杂(this link 很有趣)
这个问题与
我正在使用 Python、Flask 和 WTForms 制作表格。这是 python:
from flask import render_template
from flask_wtf import FlaskForm
from wtforms import DecimalField, SubmitField
from wtforms.validators import NumberRange, DataRequired
class NumberForm(FlaskForm):
question_one = DecimalField('Question 1', validators=[NumberRange(min=0, max=10)])
question_two = DecimalField('Question 2', validators=[DataRequired()])
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_one.label }}
<div>
{{ form.question_one }}
</div>
</div>
<div class="form-group-row">
{{ form.question_two.label }}
<div>
{{ form.question_two }}
</div>
</div>
<div class="form-group-row">
{{ form.submit }}
</div>
</form>
我使用的两个验证器(NumberRange
和 DataRequired
)的行为不同。如果未在字段 2 中输入数据并单击提交按钮,则不会提交表单,并且会在字段旁边弹出一条错误消息,显示 "Please fill in this field".
当在字段 1 中提交字符串(而不是小数)或超出范围的数字时,按下按钮时表单会提交。
尽管错误已记录(并且可以使用 {{ form.errors }}
显示),但我希望两个验证器具有相同的行为 - 我希望在字段 1 中输入无效 numbers/strings 时阻止提交表单。
有人知道为什么验证者的行为不同吗?
HTML5 引入了 required 属性,如果其中一个字段(受此属性影响)尚未被验证,则必须填写字段并阻止表单验证人口稠密;此属性仅适用于输入标签。
使用flask-wtf,当你使用带有required验证器的字段时,它会自动生成一个带有required属性的html字段,这将阻止从被发送并显示信息的形式。
在NumberRange
等其他验证器的情况下,就不一样了。
与纯HTML:
要具有相同的行为,即检查输入的数字是否在明确定义的范围内,如果不是这样则阻止发送表单,有必要使用 pattern 属性(更多细节here)。对于这种特殊情况没有预定义模式,因此您需要使用 正则表达式 创建自定义模式。它将给出:<input type="text" pattern="[0-9]">
.
现在我们只需要用 wtforms 重新采用相同的逻辑...
使用 wtforms:
<form method="POST">
<div class="form-group-row">
{{ form.hidden_tag() }}
{{ form.question_one.label }}
<div>
{{ form.question_one(pattern="[0-9]") }}
</div>
</div>
<div class="form-group-row">
{{ form.question_two.label }}
<div>
{{ form.question_two }}
</div>
</div>
<div class="form-group-row">
{{ form.submit }}
</div>
</form>
在第 {{ form.question_one(pattern="[0-9]") }}
行,我使用带有正则表达式的模式属性来检查输入的数字是否在 0 到 9 的范围内。对于更大的范围,您需要多写一些正则表达式复杂(this link 很有趣)