2017-10-12 2 views
0

Je travaille sur une application Flask simple qui utilise des formes modales Bootstrap, initiées par JavaScript.Flask-wtf perdre la valeur de la variable lorsque le formulaire est soumis à nouveau après l'échec de la validation

En utilisant Flask-WTF avec une validation de champ, je suis en mesure de soumettre des formulaires très bien tant que tous les champs obligatoires sont remplis. Toutefois, en cas d'erreur de validation, le formulaire n'est pas correctement soumis lorsqu'il est corrigé.
Je reçois un '405 - Méthode non autorisée' car il essaie de se poster sur lui-même.

Je ne comprends pas pourquoi je suis perdre ma variable "url" car il est mis à null. Toute idée est très appréciée.

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); 
      } 
      }); 
     }) 
     }); 
    }); 
    }); 

Vue:

@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") 

Forme:

{% 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> 

Répondre

0

exécuter le débogueur dans votre IDE, définissez un point d'arrêt dans add_site () et aller ligne par ligne pour comprendre pourquoi votre fonction renvoie null. Ma conjecture est quelque chose près de votre code de validation ...