Python Flask (使用者狀態管理)

出處: Youtube 彭彭的課程  Python Flask 網站後端開發 – 使用者狀態管理 Session

實作筆記

網站前端和後端對話時,通常在進行連線請求時,每一次連線都是獨立的連線,第一次連線和第二次連線是不相干的,第一次連線結束時,再進行第二次連線時,若希望能保留第一次連線的資訊,讓後端可以記住前端資訊就是使用者狀態管理(保存)Session

使用者狀態管理(保存)Session

第一步 import session物件 from flask import session

第二步 設定密鑰 app.secret_key=”gogogo”

第三步 設立第一次連線,並把資料存在Session session[“username”]=name #session[“欄位名稱”]=資料

第四步 設立第二次連線,讀取Session資料 name = session[“username”]

from flask import Flask #import Flask模組

from flask import session #import session物件

app = Flask(
    __name__,
    static_folder= "static", #靜態檔案的資料夾名稱
    static_url_path ="/"   #靜態檔案對應的網址路徑     
)    
app.secret_key="gogogo"  #設定密鑰

#使用GET方法,建立路徑 /hello?name=使用者名字  (127.0.0.1:2000/hello?name=Nini)
@app.route("/hello")
def hello():    
    name = request.args.get("name","")
    session["username"]=name #session["欄位名稱"]=資料
    return "Hello" + name

#使用GET方法 處理路徑 /talk
@app.route("/talk")
def talk():    
    name = session["username"]
    return "Nice to meet you " + name

這一邊設定好後

先來試看看第一次連線,告訴後台我叫Nini,希望後台第二次連線可以記得我

127.0.0.1:2000/hello?name=Nini

進行第二次連線

http://127.0.0.1:2000/talk

這次我沒有跟他講我叫Nini但是他可以記得我,代表成功了

進階

結合前幾章的東西,輸入帳號Nini和密碼登入後,返回首頁再輸入成績提交後,希望可以看到我之前輸入的帳號在加上成績的頁面。

返回首頁,輸入成績提交
這邊顯示我的帳號拉


from flask import Flask #import Flask模組
from flask import request #import request物件
from flask import render_template #import rrender_template函式
from flask import session #import session物件

#建立Application物件,可以設定靜態檔案的路徑處理

app = Flask(
    __name__,
    static_folder= "static", #靜態檔案的資料夾名稱
    static_url_path ="/"   #靜態檔案對應的網址路徑     
)    
app.secret_key="gogogo"  #設定密鑰

#1使用POST方法,建立路徑/show對應的處理函式
@app.route("/show",methods=["POST"])
def show():    
    #接收GET方法的 Query String
    #account = request.args.get("a","")
    #password = request.args.get("p","")
    #接收POST方法的 Query String
    account = request.form["a"]
    password = request.form["p"]
    session["account"]=account #session["欄位名稱"]=資料
    return "帳號是: " + account + "密碼是: " + password
#回傳網站page的內容

#2建立路徑/grade對應的處理函式
@app.route("/grade")
def grade():    
    math = request.args.get("Math","")
    math  = int(math)
    english = request.args.get("English","")
    english = int(english)
    average = (math+english)/2
    account = session["account"]
    return account + "平均:" + str(average)
#回傳網站page的內容