我使用了相同的表格来提交,并且过去一直有效。提交按钮现在无法使用,因此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>
答案 0 :(得分:1)
我在HTML中看到您拥有
<form method="POST" action="/index">
但是在Python代码中,@route
中没有/index
@app.route('/', methods=['GET', 'POST'])
如果将form
标记更改为POST到/
,是否可行?