亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Flask 操作 Session

上一個小節我們講解了如何使用 Flask 框架操作 Cookie,作為和 Cookie 相輔相成的 Session,Flask 框架也對其做了很好的支持,這節課我們就來學習下如何使用 Flask 框架操作 Session。和 Cookie 的操作差不多,對 Session 的操作同樣有 設置、獲取、刪除等等。

1. 程序簡介

1.1 程序功能和結構

完成一個 Flask 程序,提供操作 Session 的 4 項功能,如下表所示:

頁面路徑 功能
/set 在 Session 中存儲一個名稱為 ‘user’、值為 ‘tom’ 的變量
/get 獲取 Session 中名稱為 ‘user’ 的變量
/del 刪除 Session 中名稱為 ‘user’ 的變量
/clear 清除 Session 中所有的變量

程序有 2 個源文件構成:

源文件 描述
app.py Flask 后端程序,提供操作 Session 的接口
templates/query.html 查詢 Session 中名稱為 ‘user’ 的變量,并返回給客戶端

1.2 源程序下載

2. 頁面模板 query.html

用戶的數據存儲在 Session 中,服務端程序使用頁面模板 query.html 展示 Session 中的數據,代碼如下:

<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

服務端程序 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 是一個密鑰,Flask 以及相關的擴展 extension 需要進行加密時需要使用到這個密鑰,使用 Session 存儲數據時,Flask 在內部需要進行加密處理。

初始化 Flask 應用對象后,配置 SECRET_KEY。函數 os.urandom (24) 生成一個包含 24 個字符的隨機字符串,這個字符串被作為 SECRET_KEY。

3.2 返回給瀏覽器的內容

def query(): 
    user = session.get('user')
    return render_template('query.html', user = user)

query 函數從 Session 中獲取名稱為 ‘user’ 的變量,將值作為參數傳遞給頁面模板 query.html,服務端渲染后生成包含有 Session 變量的值內容,返回給瀏覽器。

Flask 程序對 Sesion 進行設置、修改、刪除的操作后,最后調用 query () 函數將 Session 中包含的變量的值返回給瀏覽器。

注意:可以通過 session [‘user’] 的方法獲取名稱為 ‘user’ 的變量的值,兩者的區別在于

  • 如果變量 user 不存在,session [‘user’] 會拋出異常
  • 如果變量 user 不存在,session.get (‘user’) 返回 None,不會拋出異常

3.3 設置 Session 中的變量

@app.route('/set')
def set():
    session['user'] = 'tom'
    return query()

設置頁面路徑 /set 的處理函數為 set,函數 set () 在 Session 中設置名稱為 ‘user’ 的變量的值為 ‘tom’,最后調用 query () 函數返回 Session 中變量的值給瀏覽器。

3.4 獲取 Session 中的變量

@app.route('/get')
def get():
    return query()

設置頁面路徑 /get 的處理函數為 get,函數 get 調用函數 query 返回 Session 中變量的值給瀏覽器。

3.5 刪除 Session 中的變量

@app.route('/del')
def delete():
    session.pop('user')
    return query()

設置頁面路徑 /del 的處理函數為 del,函數 del 使用 session.pop (‘user’) 在 Session 中刪除名稱為 ‘user’ 的變量,最后調用函數 query 返回 Session 中變量的值給瀏覽器。

3.6 清空 Session 中全部的變量

@app.route('/clear')
def clear():
    session.clear()
    return query()

if __name__ == '__main__':
    app.run(debug=True)

設置頁面路徑 /set 的處理函數為 clear,函數 clear 使用 session.clear () 刪除 Session 中所有的變量,最后調用函數 query 返回 Session 中變量的值給瀏覽器。

4. 運行程序

圖片描述

初始化的狀態下,Session 為空,因此變量 user 的值為空。

2. 在瀏覽器器中輸入 http://localhost:5000/set,顯示如下:

圖片描述

在頁面 /set 的處理函數中,設置 Session 中名稱為 ‘user’ 的變量值為 ‘tom’,設置成功后,顯示名稱為 ‘user’ 的變量的值為 ‘tom’。

3. 在瀏覽器器中輸入 http://localhost:5000/del,顯示如下:

圖片描述

在頁面 /del 的處理函數中,刪除 Session 中名稱為 ‘user’ 的變量,刪除后,顯示名稱為 ‘user’ 的變量的值為空。

4. 在瀏覽器器中輸入 http://localhost:5000/clear,顯示如下:

圖片描述

在頁面 /clear 的處理函數中,刪除 Session 中所有的變量,刪除后,顯示名稱為 ‘user’ 的變量的值為空。

5. 小結

本節講解在 Flask 中如何操作 Session,使用思維導圖概括如下:

圖片描述