2016-09-11 70 views
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在不同請求之間不再可用?

回答

1

它不能傳遞任何重定向,因爲它是一個全新的請求。

+0

您是否暗示,在第一個版本中,當我按下提交按鈕時,會再次發送「舊」請求? –

+0

當前請求完成併發送響應。但是重定向是一個指令給瀏覽器請求一個新頁面,這意味着一個新的請求和一個新的處理器調用。 –

+0

難題,但在第一個版本中,每次用戶點擊提交按鈕時都不是「全新的請求」?換句話說,你的意思是說,在第一個版本中,'index'處理程序實際上只調用一次? –