在Flask的WTForms中验证DecimalRangeField

时间:2019-01-08 10:43:18

标签: python validation flask flask-wtforms

我正在尝试验证DecimalRangeField,以便要求用户提供输入。问题是我想要一个默认值,例如50(滑块出现在中间),这导致内置验证器DataRequiredInputRequired(我都尝试过)失败,因为它们采用了默认值作为给定的分数,即使用户没有显示任何操作(至少这是我认为的情况)。

如何获得一些默认值,但仍要检查用户是否采取了任何措施(即使最后与默认值相同,也要在滑块上的某个位置单击),并显示错误消息,例如“此字段必填以防用户未触摸滑块?我需要为此使用自定义验证器吗?

谢谢您的建议。

以下是相关的代码部分:

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>

1 个答案:

答案 0 :(得分:1)

这可能最好在前端进行处理(除非有人出现来纠正我)。
您可以使用Javascript阻止表单提交,并显示一条消息,直到用户单击滑块为止。
否则,您将不得不拒绝某个值并重新加载页面并闪烁一条错误消息,告诉用户将滑块从“ 50”移开。这里的问题是,由于它是一个滑块,因此用户不必提供输入,因此它总是在表单提交时发送数字值。