I am working on a simple Flask app which utilizes Bootstrap modal forms, initiated by JavaScript.
Using Flask-WTF
with some field validation, I am able to submit forms fine as long as all the required fields are filled out.
However if there is a validation error, when corrected, the form does not properly submit.
I get a '405 - Method not allowed' because it tries to post back to itself.
I'm not understanding why I'm losing my "url" variable as it's being set to null
. Any insight is much appreciated.
Script:
$(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);
}
});
})
});
});
});
View:
@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")
Form:
{% 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>