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. 运行程序
1. 在浏览器器中输入 http://localhost:5000/get,显示如下:
初始化的状态下,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,使用思维导图概括如下: