flask - Flask WTForm:提交按钮不会产生错误
问题描述
我使用了相同的表单来提交,并且它在过去一直有效。提交按钮现在不起作用,因此 POST 和验证循环中的所有内容都没有被执行。
这是一个单页网络应用程序。此表单应包含 7 个字段并写入数据库。该应用程序确实正确打印了数据库中的记录(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>
解决方案
您必须指定按钮的类型。我解决了这样的问题
class ApplicationForm(FlaskForm):
...
submit = SubmitField(
'Submit',
render_kw={'type':'submit'})
你需要修复动作路径
<form method="POST" action="/">
推荐阅读
- node.js - req.body 未定义...我该如何解决
- jenkins - 零星问题:Jenkins TFS 插件抛出 NumberFormatException
- swift - 如何将 swift 编译器版本更新为 5.1?
- solr - 从 SOLR 6.6 更新到 8.2 后 SOLR 自定义字段类型丢失
- python-3.x - fit_generator 中的 class_weight 作为 np.array 还是字典?
- sql - 查询以在没有年份的两个日期之间进行选择
- sql - SQL select based on column value unpivot/pivot column based to row based
- git - Git:在两个私有远程(GitHub)存储库中反映本地存储库更改
- git - 哪些文件要从 Flutter 项目上传到版本控制?
- vuex - 将对象传递给 Vuex 突变是一种好习惯吗?