2015-08-11 25 views
5

Voglio reimpostare il modulo dopo la convalida. Attualmente il modulo mostrerà ancora i dati precedenti dopo che è stato inviato e valido. Fondamentalmente, voglio che il modulo torni allo stato originale con tutti i campi puliti. Qual è il corretto fare questo?Cancella modulo valido dopo che è stato inviato

@mod.route('/', methods=['GET', 'POST']) 
def home(): 
    form = NewRegistration() 

    if form.validate_on_submit(): 
     #save in db 

     flash(gettext(u'Thanks for the registration.')) 

    return render_template("users/registration.html", form=form) 

risposta

9

Il problema è che si sta sempre rendendo il modulo con qualunque è stata approvata dati, anche se i dati validati e è stata gestita. Inoltre, il browser memorizza lo stato dell'ultima richiesta, quindi se si aggiorna la pagina a questo punto il browser invierà nuovamente il modulo.

Dopo aver gestito una richiesta di modulo riuscita, reindirizzare alla pagina per ottenere uno stato nuovo.

@app.route('/register', methods=['GET', 'POST']) 
def register(): 
    form = RegistrationForm() 

    if form.validate_on_submit(): 
     # do stuff with valid form 
     # then redirect to "end" the form 
     return redirect(url_for('register')) 

    # initial get or form didn't validate 
    return render_template('register.html', form=form) 
+0

non so il motivo, ma ho bisogno di usare il punto ('.home'). Altrimenti otterrò generare BuildError (endpoint, valori, metodo) – user455318

+2

@ user455318 perché il percorso è in un progetto. È possibile utilizzare anche l'assoluto 'blueprint_name.home', il' .' è solo una scorciatoia per "blueprint corrente". – davidism