Flask 操作 Session
上一個小節(jié)我們講解了如何使用 Flask 框架操作 Cookie,作為和 Cookie 相輔相成的 Session,F(xiàn)lask 框架也對其做了很好的支持,這節(jié)課我們就來學(xué)習(xí)下如何使用 Flask 框架操作 Session。和 Cookie 的操作差不多,對 Session 的操作同樣有 設(shè)置、獲取、刪除等等。
1. 程序簡介
1.1 程序功能和結(jié)構(gòu)
完成一個 Flask 程序,提供操作 Session 的 4 項功能,如下表所示:
頁面路徑 | 功能 |
---|---|
/set | 在 Session 中存儲一個名稱為 ‘user’、值為 ‘tom’ 的變量 |
/get | 獲取 Session 中名稱為 ‘user’ 的變量 |
/del | 刪除 Session 中名稱為 ‘user’ 的變量 |
/clear | 清除 Session 中所有的變量 |
程序有 2 個源文件構(gòu)成:
源文件 | 描述 |
---|---|
app.py | Flask 后端程序,提供操作 Session 的接口 |
templates/query.html | 查詢 Session 中名稱為 ‘user’ 的變量,并返回給客戶端 |
1.2 源程序下載
2. 頁面模板 query.html
用戶的數(shù)據(jù)存儲在 Session 中,服務(wù)端程序使用頁面模板 query.html 展示 Session 中的數(shù)據(jù),代碼如下:
<html>
<head>
<meta charset='UTF-8'>
<title>顯示 session 中的變量</title>
</head>
<body>
<h1>顯示 session 中的變量</h1>
<h2>session.get('user') = {{ user }}</h2>
</body>
</html>
在 Session 中存儲了一個名稱為 ‘user’ 的變量,頁面模板顯示該變量的值。
3. 后端程序 app.py
服務(wù)端程序 app.py 提供操作 Session 的功能,程序代碼分為如下部分:
3.1 引入模塊
#!/usr/bin/python3
from flask import Flask, session, render_template
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
Flask 程序中有個配置屬性叫做 SECRET_KEY,SECRET_KEY 是一個密鑰,F(xiàn)lask 以及相關(guān)的擴展 extension 需要進行加密時需要使用到這個密鑰,使用 Session 存儲數(shù)據(jù)時,F(xiàn)lask 在內(nèi)部需要進行加密處理。
初始化 Flask 應(yīng)用對象后,配置 SECRET_KEY。函數(shù) os.urandom (24) 生成一個包含 24 個字符的隨機字符串,這個字符串被作為 SECRET_KEY。
3.2 返回給瀏覽器的內(nèi)容
def query():
user = session.get('user')
return render_template('query.html', user = user)
query 函數(shù)從 Session 中獲取名稱為 ‘user’ 的變量,將值作為參數(shù)傳遞給頁面模板 query.html,服務(wù)端渲染后生成包含有 Session 變量的值內(nèi)容,返回給瀏覽器。
Flask 程序?qū)?Sesion 進行設(shè)置、修改、刪除的操作后,最后調(diào)用 query () 函數(shù)將 Session 中包含的變量的值返回給瀏覽器。
注意:可以通過 session [‘user’] 的方法獲取名稱為 ‘user’ 的變量的值,兩者的區(qū)別在于:
- 如果變量 user 不存在,session [‘user’] 會拋出異常
- 如果變量 user 不存在,session.get (‘user’) 返回 None,不會拋出異常
3.3 設(shè)置 Session 中的變量
@app.route('/set')
def set():
session['user'] = 'tom'
return query()
設(shè)置頁面路徑 /set 的處理函數(shù)為 set,函數(shù) set () 在 Session 中設(shè)置名稱為 ‘user’ 的變量的值為 ‘tom’,最后調(diào)用 query () 函數(shù)返回 Session 中變量的值給瀏覽器。
3.4 獲取 Session 中的變量
@app.route('/get')
def get():
return query()
設(shè)置頁面路徑 /get 的處理函數(shù)為 get,函數(shù) get 調(diào)用函數(shù) query 返回 Session 中變量的值給瀏覽器。
3.5 刪除 Session 中的變量
@app.route('/del')
def delete():
session.pop('user')
return query()
設(shè)置頁面路徑 /del 的處理函數(shù)為 del,函數(shù) del 使用 session.pop (‘user’) 在 Session 中刪除名稱為 ‘user’ 的變量,最后調(diào)用函數(shù) query 返回 Session 中變量的值給瀏覽器。
3.6 清空 Session 中全部的變量
@app.route('/clear')
def clear():
session.clear()
return query()
if __name__ == '__main__':
app.run(debug=True)
設(shè)置頁面路徑 /set 的處理函數(shù)為 clear,函數(shù) clear 使用 session.clear () 刪除 Session 中所有的變量,最后調(diào)用函數(shù) query 返回 Session 中變量的值給瀏覽器。
4. 運行程序
1. 在瀏覽器器中輸入 http://localhost:5000/get,顯示如下:
初始化的狀態(tài)下,Session 為空,因此變量 user 的值為空。
2. 在瀏覽器器中輸入 http://localhost:5000/set,顯示如下:
在頁面 /set 的處理函數(shù)中,設(shè)置 Session 中名稱為 ‘user’ 的變量值為 ‘tom’,設(shè)置成功后,顯示名稱為 ‘user’ 的變量的值為 ‘tom’。
3. 在瀏覽器器中輸入 http://localhost:5000/del,顯示如下:
在頁面 /del 的處理函數(shù)中,刪除 Session 中名稱為 ‘user’ 的變量,刪除后,顯示名稱為 ‘user’ 的變量的值為空。
4. 在瀏覽器器中輸入 http://localhost:5000/clear,顯示如下:
在頁面 /clear 的處理函數(shù)中,刪除 Session 中所有的變量,刪除后,顯示名稱為 ‘user’ 的變量的值為空。
5. 小結(jié)
本節(jié)講解在 Flask 中如何操作 Session,使用思維導(dǎo)圖概括如下: