【问题标题】:Submit button is not working on flask form [closed]提交按钮不适用于烧瓶表单[关闭]
【发布时间】:2020-05-10 23:32:05
【问题描述】:

我使用了相同的表单来提交,并且它在过去一直有效。提交按钮现在不起作用,因此 POST 和验证循环中的所有内容都没有被执行。

这是一个单页网络应用程序。此表单应包含 7 个字段并写入数据库。应用程序确实正确打印了数据库中的记录(recent_data),因此与数据库的连接是正确的。

预期行为:这应该会产生一个 POST-GET 重定向。提交按钮应该会触发一个 POST,它应该会重定向到主页,表单现在是空的。

当前行为:提交按钮不做任何事情。

复制:我认为这可以通过在我的代码中添加的普通样板烧瓶应用程序代码来复制。

调试:没有错误显示。

class ApplicationForm(FlaskForm):
    emp_length_cat = IntegerField(
        u'How long have you been with your employer? (1-11)',
        validators=[DataRequired()])
    home_status = IntegerField(
        u'What is your housing status? (1-Rent, 2-Other, 3-Mortgage, 4-Own)',
        validators=[DataRequired()])
    zip3 = IntegerField(
        u'What is the first 3 digits of your zip code?',
        validators=[DataRequired()])
    total_acc = IntegerField(
        u'How many accounts have you ever had in your name?',
        validators=[DataRequired()])
    annual_inc = IntegerField(
        u'What is your annual income? (no commas)',
        validators=[DataRequired()])
    dti = IntegerField(
        u'What is your debt-to-income ratio? (round to 2 decimals)',
        validators=[DataRequired()])
    descr = StringField(
        u'Why do you need this loan? (enter text)',
        validators=[DataRequired()])
    submit = SubmitField('Submit')


@app.route('/', methods=['GET', 'POST'])
def index():
    # Set form
    form = ApplicationForm(request.form)
    data = []
    # Display db connection
    with db.connect() as conn:
        recent_data = conn.execute(
            "SELECT * FROM loans_tbl " "ORDER BY id DESC LIMIT 5"
        ).fetchall()
        for row in recent_data:
            data.append({"id": row[0], "target": row[1], "emp_length_cat": row[2],
                         "home_status": row[3], "zip3": row[4], "total_acc": row[5],
                         "annual_inc": row[6], "dti": row[7], "descr": row[8],
                         "scores": row[9], "predict": row[10]})
    if request.method == 'POST' and form.validate_on_submit():
        emp_length_cat = form.emp_length_cat.data
        home_status = form.home_status.data
        zip3 = form.zip3.data
        total_acc = form.total_acc.data
        annual_inc = form.annual_inc.data
        dti = form.dti.data
        descr = form.descr.data
        with db.connect() as conn:
            conn.execute(
                """INSERT INTO
                    loans_tbl (
                        emp_length_cat,
                        home_status,
                        zip3,
                        total_acc
                        annual_inc,
                        dti,
                        descr)
                VALUES (%s,%s,%s,%s,%s,%s,%s)""",
                (emp_length_cat, home_status, zip3, total_acc, annual_inc, dti, descr)
            )
        db.session.commit()
        flash('Thanks for applying')
        return redirect(url_for('index'))
    return render_template('index.html',
                           form=form,
                           recent_data=data)
<div class="container">
    <div class="row">
        <div class="col">
            <h4>Begin application here:</h4>
            <form method="POST" action="/index">
                {{ form.hidden_tag() }}
                {{ form.emp_length_cat.label }} {{ form.emp_length_cat(id='emp_length_cat') }} </br>
                {{ form.home_status.label }} {{ form.home_status(id='home_status') }} </br>
                {{ form.zip3.label }} {{ form.zip3(id='zip3') }} </br>
                {{ form.total_acc.label }} {{ form.total_acc(id='total_acc') }} </br>
                {{ form.annual_inc.label }} {{ form.annual_inc(id='annual_inc') }} </br>
                {{ form.dti.label }} {{ form.dti(id='dti') }} </br>
                {{ form.descr.label }} {{ form.descr(id='descr') }} </br>
                {{ form.submit() }}
            </form> 
        </div>
        <div class="form_errors">
           {{ form.errors }}
       </div>
    </div>
    <div class="row">
        <div class="col">
            <h4>Last five loans in the db (3rd and 5th have default correctly predicted)</h4>
            {% for data in recent_data %}
            <li>
                Default flag (1 for default) {{data.target}},</br> emp_length_cat {{data.emp_length_cat}},</br> 
                home_status code {{data.home_status}},</br> first 3 of zip {{data.zip3}},</br> total accounts in
                borrower's name {{data.total_acc}},</br> annual_inc {{data.annual_inc}},</br> debt to income {{data.dti}}, </br></br>
                description field <i>{{data.descr}}</i>, </br></br> nlp score {{data.scores}},</br> prediction from model {{data.predict}}
            </li>
            {% endfor %}
        </div>
    </div>
</div>

【问题讨论】:

    标签: flask sqlalchemy flask-wtforms


    【解决方案1】:

    我在 HTML 中看到了:

    <form method="POST" action="/index">
    

    但在 Python 代码中,/index 没有 @route

    @app.route('/', methods=['GET', 'POST'])
    

    如果您将form 标签更改为 POST 到 /,它是否有效?

    【讨论】:

    • 感谢您的回复。我试过了,还是不行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    相关资源
    最近更新 更多