2016-09-11 2 views
0

Die View-Funktion meines Spielzeug App war:Pfosten-/Redirect/Get-Muster in Kolben

@app.route('/', methods=['GET', 'POST']) 
def index(): 
    name = None 
    form = NameForm() 
    if form.validate_on_submit(): 
     name = form.name.data 
     form.name.data = '' 
    return render_template('index.html', form=form, name=name) 

Und es sieht so aus, als ich PRG:

@app.route('/', methods=['GET', 'POST']) 
def index(): 
    form = NameForm() 
    if form.validate_on_submit(): 
     session['name'] = form.name.data 
     return redirect(url_for('index')) 
    return render_template('index.html', form=form, name=session.get('name')) 

Wie können Sie, die sehen form.name.data = '' Zeile wird verwendet, um das Eingabefeld in der ersten Version zu löschen, aber es wird nicht in der zweiten Version benötigt. Ich dachte Flask-WTF würde automatisch den Text in StringField in die neue form Instanz übergeben, aber aus einigen Gründen tat es nicht.

Meine Frage ist: Warum form.name.data ist nicht mehr verfügbar zwischen verschiedenen Anfragen, wenn ich PRG verwende?

Antwort

1

Es kann nichts über eine Weiterleitung übergeben werden, da es eine komplett neue Anfrage ist.

+0

Implizieren Sie, dass in der ersten Version, wenn ich den Absenden-Button drücke, die "alte" Anfrage erneut gesendet wird? –

+0

Die aktuelle Anforderung wird abgeschlossen und sendet die Antwort. Eine Umleitung ist jedoch eine Anweisung an den Browser, eine neue Seite anzufordern, was eine neue Anfrage und einen neuen Aufruf des Handlers bedeutet. –

+0

Gotcha, aber in der ersten Version, ist nicht eine "komplett neue Anfrage" jedes Mal gesendet, wenn ein Benutzer auf die Schaltfläche Senden klicken? Oder anders gesagt, meinst du, dass in der ersten Version der 'index'-Handler tatsächlich nur einmal aufgerufen wird? –