2017-10-12 116 views
0

我正在使用一个简单的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">&times;</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> 

回答

0

在你的IDE运行调试,在add_site (设置断点),并通过走线一行来找出你的函数为什么返回null。我的猜测是你的验证码附近的东西...