【问题标题】:flask multiple forms on the same page在同一页面上烧瓶多个表单
【发布时间】:2020-01-27 02:19:10
【问题描述】:

我的烧瓶应用程序出现问题,基本上我在同一个 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)

【问题讨论】:

    标签: python html forms flask flask-wtforms


    【解决方案1】:

    您可以通过提交输入来区分这些表单。只需将它们设置为不同的 id/name 并通过检查其 id/name 是否存在于 request.form 中来检查表单提交是否来自此特定表单。

    第一种形式:

    <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)
    

    【讨论】:

    • 我试过你的代码,提交第二个表单时总是验证失败,你知道为什么会这样吗?
    • @TerchilăMarian 您是否在第二个表单中添加了<input type="submit" id="form2-submit" name="form2-submit" value="Submit form2">
    • 是的,我做到了,它的工作原理有点像,当我输入无效的电子邮件时,会弹出错误,但是当我输入有效的电子邮件地址时,验证失败
    • 我刚刚发现当form2.validate_on_submit() 失败时它仍然返回值,你知道为什么吗?
    • 您的两个表单中都有{{ form.hidden_tag() }} 吗?如果它适用于第一种形式,那么它应该适用于第二种形式。
    猜你喜欢
    • 2021-02-25
    • 1970-01-01
    • 2017-05-18
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多