在同一页面上烧瓶多种形式

时间:2019-09-26 18:45:10

标签: python html forms flask flask-wtforms

我的flask应用程序遇到了问题,基本上我在同一个html页面中有两种形式,当我提交一个或另一个表单时,它会同时提交两个表单。我有什么办法可以将它们分开,以便我可以分别提交它们?

@app.route('/smtp/', methods=['GET', 'POST'])
def smtp():
    form = UpdateSMTPForm()
    form2 = UpdateEmailAddress()
    query = Email.query.all()

    if  form.validate_on_submit():
        email = str(form.email.data)
        password = str(form.password.data)
        server = str(form.server.data)
        port = str(form.port.data)

        if tools.test_email(server, port, email, password):
            CONFIG['SMTP']['server'] = server
            CONFIG['SMTP']['port'] = port
            CONFIG['SMTP']['username'] = email
            CONFIG['SMTP']['password'] = password

            with open('config.json', 'w') as f:
                f.write(json.dumps(CONFIG))
                f.close()
        else:
            form.server.errors.append("Invalid account, be sure that you have less secure app access turned on or try with a gmail account")


    if form2.validate_on_submit():
        print('form2 email updated {}'.format(form2.email))
    else:
        print('cannot validate the second form')

    return render_template('smtp.html', config=CONFIG['SMTP'], query=query, form=form, form2=form2)

1 个答案:

答案 0 :(得分:1)

您可以通过提交输入来区分这些表格。只需为他们设置不同的ID /名称,然后检查request.form中是否存在ID /名称,即可检查表单提交是否源自此特定表单。

第一种形式:

<input type="submit" id="form-submit" name="form-submit" value="Submit form">

第二个:

<input type="submit" id="form2-submit" name="form2-submit" value="Submit form2">

以及您认为的逻辑:

@app.route('/smtp/', methods=['GET', 'POST'])
def smtp():
    form = UpdateSMTPForm()
    form2 = UpdateEmailAddress()
    query = Email.query.all()

    if  "form-submit" in request.form and form.validate_on_submit():
        email = str(form.email.data)
        password = str(form.password.data)
        server = str(form.server.data)
        port = str(form.port.data)

        if tools.test_email(server, port, email, password):
            CONFIG['SMTP']['server'] = server
            CONFIG['SMTP']['port'] = port
            CONFIG['SMTP']['username'] = email
            CONFIG['SMTP']['password'] = password

            with open('config.json', 'w') as f:
                f.write(json.dumps(CONFIG))
                f.close()
        else:
            form.server.errors.append("Invalid account, be sure that you have less secure app access turned on or try with a gmail account")


    if "form2-submit" in request.form and form2.validate_on_submit():
        print('form2 email updated {}'.format(form2.email))
    else:
        print('cannot validate the second form')

    return render_template('smtp.html', config=CONFIG['SMTP'], query=query, form=form, form2=form2)