FlaskFrom之单表多提交按钮实现

背景

使用flask实现一个针对AD账号的操作处理,需要前台输入一个ad账号,通过下面不同的按钮实现“查询”,“删除”等操作。

思路

根据需求,这里涉及要一个表单中需要有多个submit按钮的实现了。

常规的FlaskForm使用为:

  • forms.py中定义表单组件

    1
    2
    3
    class AdUnlocker(FlaskForm):
    ad = StringField(u'AD账号', validators=[DataRequired()], default='kfzx-')
    submit = SubmitField(u'解锁')
  • views.py中调用表单,并判断是否有submit触发

    1
    2
    3
    4
    5
    6
    7
    8
    9
    @ad.route('/AdUnlock', methods=['GET', 'POST'])
    def adunlock():
    form = AdUnlocker()
    if form.validate_on_submit():
    ad = form.ad.data
    result = unLocker(ad)
    flash(result)
    return redirect(url_for('.adunlock'))
    return render_template("AD.html", form=form)

那么如果当我们需要有多个submit组件的情况呢:

  • forms.py中定义表单组件

    1
    2
    3
    4
    class AdDel(FlaskForm):
    ad = StringField(u'AD账号', validators=[DataRequired()], default='kfzx-')
    check = SubmitField(u'查询')
    delete = SubmitField(u'删除')

    这里我们定义了两个SubmitField,不管点击了哪个按钮,均是触发了提交,那么怎么区分判断呢?

    根据官网说明,是可以检查submit按钮是否被点击,那么我们检查下对应的元素的data属性就会发现,当被提交按钮被点击是,它的data值为true,否则为false。

    那就可以进行判断了:

  • views.py中调用表单,并判断submit触发

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @ad.route('/AdDel', methods=['GET', 'POST'])
    def addel():
    form = AdDel()
    if form.validate_on_submit():
    ad = form.ad.data
    if form.check.data:
    result = queryAD(ad)
    elif form.delete.data:
    result = deleteAD(ad)
    flash(result)
    return redirect(url_for('.addel'))
    return render_template("AD.html", funcheader=funcheader, form=form)

扩展

wtforms官网说明:https://wtforms.readthedocs.io/en/stable/fields.html#wtforms.fields.PasswordField