在 Flask 的 WTForms 中验证 DecimalRangeField
Validate DecimalRangeField in Flask's WTForms
我正在尝试验证 DecimalRangeField
以便用户需要提供输入。问题是我想要一个默认值,例如 50(滑块出现在中间),这导致内置验证器 DataRequired
和 InputRequired
(我都试过了)失败,因为它们采用默认值作为给定的分数,即使用户没有显示任何操作(至少这是我认为会发生的)。
我怎样才能有一些默认值,但仍然检查用户是否采取了任何行动(点击滑块上的某个地方,即使它最终与默认值相同)并显示错误,例如 "This field is required" 以防用户没有触摸滑块?为此我需要一个自定义验证器吗?
感谢您的任何建议。
相关代码部分如下:
index.py
@app.route("/questionnaire1", methods=['GET', 'POST'])
def controlAndDeliberation():
form = controlAndDeliberationForm()
if form.validate_on_submit():
return redirect(url_for())
return render_template('control_and_deliberation.html', form=form)
questionnaires.py
class controlAndDeliberationForm(FlaskForm):
perceivedControlQ1 = DecimalRangeField(
'1. How much control did you feel you have?',
default=50,
validators=[DataRequired()]
)
control_and_deliberation.html
<div class="form-group">
{{ form.perceivedControlQ1.label }}<br>
{{ form.perceivedControlQ1 }}
{% for error in form.perceivedControlQ1.errors %}
<span style="color: #d60000; font-size: 15px">{{ error }}</span>
{% endfor %}
</div>
这可能最好在前端处理(除非有人出现在这里纠正我)。
您可以使用 Javascript 来阻止表单提交并在用户单击滑块之前显示一条消息。
否则您将不得不拒绝某个值并重新加载页面并闪现一条错误消息告诉用户将滑块从“50”移开。这里的问题是因为它是一个滑块,用户不必提供输入,它总是在表单提交时发送一个数值。
我正在尝试验证 DecimalRangeField
以便用户需要提供输入。问题是我想要一个默认值,例如 50(滑块出现在中间),这导致内置验证器 DataRequired
和 InputRequired
(我都试过了)失败,因为它们采用默认值作为给定的分数,即使用户没有显示任何操作(至少这是我认为会发生的)。
我怎样才能有一些默认值,但仍然检查用户是否采取了任何行动(点击滑块上的某个地方,即使它最终与默认值相同)并显示错误,例如 "This field is required" 以防用户没有触摸滑块?为此我需要一个自定义验证器吗?
感谢您的任何建议。
相关代码部分如下:
index.py
@app.route("/questionnaire1", methods=['GET', 'POST'])
def controlAndDeliberation():
form = controlAndDeliberationForm()
if form.validate_on_submit():
return redirect(url_for())
return render_template('control_and_deliberation.html', form=form)
questionnaires.py
class controlAndDeliberationForm(FlaskForm):
perceivedControlQ1 = DecimalRangeField(
'1. How much control did you feel you have?',
default=50,
validators=[DataRequired()]
)
control_and_deliberation.html
<div class="form-group">
{{ form.perceivedControlQ1.label }}<br>
{{ form.perceivedControlQ1 }}
{% for error in form.perceivedControlQ1.errors %}
<span style="color: #d60000; font-size: 15px">{{ error }}</span>
{% endfor %}
</div>
这可能最好在前端处理(除非有人出现在这里纠正我)。
您可以使用 Javascript 来阻止表单提交并在用户单击滑块之前显示一条消息。
否则您将不得不拒绝某个值并重新加载页面并闪现一条错误消息告诉用户将滑块从“50”移开。这里的问题是因为它是一个滑块,用户不必提供输入,它总是在表单提交时发送一个数值。