提交按钮不适用于烧瓶形式

时间:2020-05-10 23:32:05

标签: flask sqlalchemy flask-wtforms

我使用了相同的表格来提交,并且过去一直有效。提交按钮现在无法使用,因此POST和validate循环中的所有内容均未执行。

这是一个单页Web应用程序。该表格应包含7个字段并写入db。应用确实正确地打印了数据库中的记录(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>

1 个答案:

答案 0 :(得分:1)

我在HTML中看到您拥有

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

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

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

如果将form标记更改为POST到/,是否可行?