在提交之前验证WTForm

时间:2016-08-23 20:13:28

标签: python flask jinja2 flask-wtforms

是否可以在离开字段后但在提交之前验证WTForm字段? 例如,在输入用户名后,在用户点击提交之前,该字段将被验证以查看其是否可用并显示复选标记。

1 个答案:

答案 0 :(得分:1)

更改字段后,执行检查并更改相邻节点中的文本。有些东西可以直接在浏览器中验证。要验证服务器上的数据,请使用JavaScript将请求发送到检查数据并返回JSON响应的视图。

@app.route('/username-exists', methods=['POST'])
def username_exists():
    username = request.form['username']
    exists = check_if_user_exists(username)
    return jsonify(exists=exists)
<input id='username' name='username'>
<p id='username-status'></p>
var username_input = $('#username');
var username_status = $('#username-status');

$('#username').on('focusout', function () {
    $.post(
        "{{ url_for('username_exists') }}",
        {
            username: username_input.val()
        },
        function (data) {
            username_status.text(data.exists ? '✔️' : '');
        }
    );
});

此示例使用jQuery,但该概念并非特定于任何库。

或者,将整个表单发布到仅验证字段的单独视图,然后return jsonify(form.errors)并在浏览器中对它们执行某些操作。代码与上面的代码基本相同,有一些额外的逻辑可以将错误消息放在正确的字段旁边。

请记住在提交表单时仍然验证数据,因为可以在浏览器外部使用其他

进行请求