0
我的玩具應用程序的視圖功能是:郵政/重定向/在燒瓶獲取模式
@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)
而且它看起來像這樣,當我用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'))
正如你所看到的, form.name.data = ''
行用於清除第一個版本中的輸入字段,但在第二個版本中不需要。我認爲Flask-WTF會自動將StringField
中的文本傳遞到新的form
實例中,但由於某些原因,它沒有。
我的問題是:當我使用PRG時,爲什麼form.name.data
在不同請求之間不再可用?
您是否暗示,在第一個版本中,當我按下提交按鈕時,會再次發送「舊」請求? –
當前請求完成併發送響應。但是重定向是一個指令給瀏覽器請求一個新頁面,這意味着一個新的請求和一個新的處理器調用。 –
難題,但在第一個版本中,每次用戶點擊提交按鈕時都不是「全新的請求」?換句話說,你的意思是說,在第一個版本中,'index'處理程序實際上只調用一次? –