1. 程式人生 > >Flask Web學習筆記(三)

Flask Web學習筆記(三)

rom from 顯示 保存 template 情況下 htm sub submit

重定向和用戶會話


1.從Flask模塊中導入session,redirect,url_for

from flask import Flask, render_template, session, redirect, url_for

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

在程序的前一個版本中,局部變量 name 被用於存儲用戶在表單中輸入的名字。這個變量現,在保存在用戶會話中,即 session[‘name‘],所以在兩次請求之間也能記住輸入的值。

用戶輸入名字後提交表單,然後點擊瀏覽器的刷新按鈕,會看到一個莫名其妙的警告,要求在再次提交表單之前進行確認。之所以出現這種情況,是因為刷新頁面時瀏覽器會重新發送之前已經發送過的最後一個請求。

如果這個請求是一個包含表單數據的 POST 請求,刷新頁面後會再次提交表單。大多數情況下,這並不是理想的處理方式

重定向作為 POST 請求的響應,而不是使用常規響應。重定向是一種特殊的響應,響應內容是 URL,而不是包含 HTML 代碼的字符串。

瀏覽器收到這種響應時,會向重定向的 URL 發起 GET 請求,顯示頁面的內容。

這個頁面的加載可能要多花幾微秒,因為要先把第二個請求發給服務器。

除此之外,用戶不會察覺到有什麽不同。現在,最後一個請求是 GET 請求,所以刷新命令能像預期的那樣正常使用了。

這個技巧稱為 Post/ 重定向 /Get 模式。程序可以把數據存儲在用戶會話中,在請求之間“記住”數據。用戶會話是一種私有存儲,存在於每個連接到服務器的客戶端中。

Flask Web學習筆記(三)