Flask wtforms 提交字段验证基于表单的变化

Flask wtforms submitfield validation based on change in form

我正在用 flask、wtforms 和 bootstrap4 编写更新表单。此表单获取从数据库填充的值。如果数据库中的值没有变化,我希望禁用提交按钮。

例如,如果用户名是来自数据库的stringfield。假设值为 "abc123",因此除非用户更改此值,否则提交按钮应禁用或至少不执行发送任何 post 请求。

代码如下所示

表格

class AccountForm(FlaskForm):
    username = StringField('Username', validators=[Length(min=4, max=20), DataRequired()])
    submit = SubmitField('Update’)

路线

@app.route("/account", methods=['GET', 'POST'])
def account():
    form = AccountForm()
    if form.validate_on_submit():
        username = str(form.username.data).lower()
        # ….. update database

    elif request.method == 'GET':
            form.username.data = username_from_db
    return render_template(‘account.html', form=form)

html

<form method="POST" action="" enctype="multipart/form-data">
          {{form.csrf_token}}

          <input class="form-control" id="username" name="username" placeholder="Username" required type="text" value=“abc123">

          <input type="submit" class="btn btn-success" value="Update">
 </form>

您可以使用 jquery

$(function(){
    var usernameValue = $('#username').val();
    $('#username').change(function(){
        if ($(this).val() != usernameValue){
            $('input.btn-success').prop('disabled', false);
        }
    });
});

并将您的 html 禁用属性添加到提交按钮

<form method="POST" action="" enctype="multipart/form-data">
          {{form.csrf_token}}

          <input class="form-control" id="username" name="username" placeholder="Username" required type="text" value=“abc123">

          <input type="submit" class="btn btn-success" value="Update" disabled>
 </form>