Flask-wtf在失败验证后重新提交表单时失去变量值
问题描述:
我正在使用一个简单的Flask应用程序,它利用由JavaScript启动的Bootstrap模式表单。Flask-wtf在失败验证后重新提交表单时失去变量值
使用Flask-WTF
进行一些字段验证,只要填写了所有必填字段,我就可以提交表单。
但是,如果出现验证错误,更正时表单不会正确提交。
我得到'405 - 方法不允许',因为它试图回发给自己。
我不理解我为什么失去我的“url”变量,因为它被设置为null
。任何见解都非常感谢。
脚本:
$(document).ready(function() {
// add device button opens modal containing device form loaded via ajax
$('#addSiteBtn').click(function() {
var url = "{{ url_for('core.add_site') }}";
$.get(url, function(data) {
$('#siteDialog .modal-content').html(data);
$('#siteDialog').modal();
$('#submit').click(function(event) {
event.preventDefault();
$.post(url, data=$('#siteForm').serialize(), function(data) {
if (data.status == 'ok') {
$('#siteDialog').modal('hide');
location.reload();
}
else {
$('#siteDialog .modal-content').html(data);
}
});
})
});
});
});
查看:
@core.route('/sites/add/', methods=['GET', 'POST'])
@login_required
def add_site():
add_site = True
site_form = SiteForm()
if site_form.validate_on_submit():
site = Site(name = site_form.name.data,
descr = site_form.description.data,
addr_01 = site_form.address_01.data,
addr_02 = site_form.address_02.data,
city = site_form.city.data,
state = site_form.state.data,
zip = site_form.zip.data,
phone = site_form.phone.data,
fax = site_form.fax.data
)
try:
db.session.add(site)
db.session.commit()
flash('Site successfully added.')
except:
flash('Error: Site already exists.')
#return redirect(url_for('core.list_sites', page=1))
return jsonify(status='ok')
return render_template('core/sites/add-edit-site.html',
add_site = add_site,
site_form = site_form,
title = "Add Site")
形式:
{% import "bootstrap/wtf.html" as wtf %}
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="close">
<span aria-hidden="true">×</span>
</button>
<h3 class="modal-title">
{% block title %}
{{ title }}
{% endblock %}
</h3>
</div>
<div class="modal-body">
<form id="siteForm" name="siteForm" class="form" method="post">
{{ wtf.quick_form(site_form) }}
</form>
</div>
答
在你的IDE运行调试,在add_site (设置断点),并通过走线一行来找出你的函数为什么返回null。我的猜测是你的验证码附近的东西...