烧瓶WTForm:提交按钮不会产生错误

时间:2020-05-11 12:04:41

标签: flask flask-sqlalchemy flask-wtforms

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

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

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

当前行为:“提交”按钮没有任何作用。

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

调试:没有错误显示。

class ApplicationForm(FlaskForm):
    emp_length_cat_input = IntegerField(
        u'How long have you been with your employer? (1-11)',
        validators=[DataRequired()])
    home_status_input = IntegerField(
        u'What is your housing status? (1-Rent, 2-Other, 3-Mortgage, 4-Own)',
        validators=[DataRequired()])
    zip3_input = IntegerField(
        u'What is the first 3 digits of your zip code?',
        validators=[DataRequired()])
    total_acc_input = IntegerField(
        u'How many accounts have you ever had in your name?',
        validators=[DataRequired()])
    annual_inc_input = IntegerField(
        u'What is your annual income? (no commas)',
        validators=[DataRequired()])
    dti_input = IntegerField(
        u'What is your debt-to-income ratio? (round to 2 decimals)',
        validators=[DataRequired()])
    descr_input = 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)
    # Form submission
    if request.method == 'POST' and form.validate_on_submit():
        session['emp_length_cat_input'] = form.emp_length_cat_input.data
        session['home_status_input'] = form.home_status_input.data
        session['zip3_input'] = form.zip3_input.data
        session['total_acc_input'] = form.total_acc_input.data
        session['annual_inc_input'] = form.annual_inc_input.data
        session['dti_input'] = form.dti_input.data
        session['descr_input'] = form.descr_input.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_input, home_status_input, zip3_input,
                 total_acc_input, annual_inc_input, dti_input, descr_input)
            )
        db.session.commit()
        flash('Thanks for applying')
        return redirect(url_for('index'))
    return render_template('index.html',
                           form=form,
                           emp_length_cat_input=session.get('emp_length_cat_input'),
                           home_status_input=session.get('home_status_input'),
                           zip3_input=session.get('zip3_input'),
                           total_acc_input=session.get('total_acc_input'),
                           annual_inc_input=session.get('annual_inc_input'),
                           dti_input=session.get('dti_input'),
                           descr_input=session.get('descr_input')
                           )
<form method="POST" action="" novalidate>
                {{ form.hidden_tag() }}
                {{ form.emp_length_cat_input.label }} {{ form.emp_length_cat_input(id='emp_length_cat') }} </br>
                {{ form.home_status_input.label }} {{ form.home_status_input(id='home_status') }} </br>
                {{ form.zip3_input.label }} {{ form.zip3_input(id='zip3') }} </br>
                {{ form.total_acc_input.label }} {{ form.total_acc_input(id='total_acc') }} </br>
                {{ form.annual_inc_input.label }} {{ form.annual_inc_input(id='annual_inc') }} </br>
                {{ form.dti_input.label }} {{ form.dti_input(id='dti') }} </br>
                {{ form.descr_input.label }} {{ form.descr_input(id='descr') }} </br>
                {{ form.submit() }}
            </form> 

3 个答案:

答案 0 :(得分:0)

您必须指定按钮的类型。我解决了这样的问题

class ApplicationForm(FlaskForm):
    ...
    submit = SubmitField(
                    'Submit',
                     render_kw={'type':'submit'})

您需要确定操作路径

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

答案 1 :(得分:0)

如果您打算将表单用作POST方法,则只需在模板内的表单内放置一个按钮即可提交给表单,然后该按钮会发送一个POST请求,该请求即为您提交的表单。

<form method="post">
    ...
    <button type="submit">Submit</button>
</form>

答案 2 :(得分:0)

更新: 我认为我的“提交”按钮出了点问题。我使用{{ wtf.quick_form(form) }}来渲染表单,它可以正常工作!谢谢。