目录:
- 每篇前言:
- Flask-session
每篇前言:
🏆🏆作者介绍:【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、CSDN原力计划作者
- 🔥🔥本文已收录于Flask框架从入门到实战专栏:《Flask框架从入门到实战》
- 🔥🔥热门专栏推荐:《Python全栈系列教程》、《爬虫从入门到精通系列教程》、《爬虫进阶+实战系列教程》、《Scrapy框架从入门到实战》、《Flask框架从入门到实战》、《Django框架从入门到实战》、《Tornado框架从入门到实战》、《前端系列教程》。
- 📝📝本专栏面向广大程序猿,为的是大家都做到Python全栈技术从入门到精通,穿插有很多实战优化点。
- 🎉🎉订阅专栏后可私聊进一千多人Python全栈交流群(手把手教学,问题解答); 进群可领取Python全栈教程视频 + 多得数不过来的计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
- 🚀🚀加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!
Flask-session
session的基本使用:
from flask import Flask, session
app = Flask(__name__)
app.secret_key = 'GuHanZhe'
@app.route('/login')
def login():
session['name_txt'] = 'guhanzhe'
return 'Login'
@app.route('/index')
def index():
name = session['name_txt']
print(name)
return 'Index'
if __name__ == '__main__':
app.run()
默认session是用如下这个类处理的(当触发存session操作的时候执行的是这个类的open_session
方法):
from flask.sessions import SecureCookieSessionInterface
app.session_interface = SecureCookieSessionInterface
那么,如果我们将这个类换一个呢?
【flask-session组件闪亮登场~】
Flask-Session 是一个 Flask 扩展,用于在 Flask Web应用程序中提供会话(session)管理功能。会话是一种用于存储和跟踪用户特定数据的机制,通常用于存储用户登录状态、购物车内容、用户首选项等数据,以便在多个HTTP请求之间保持用户状态。
值得一提的是:Flask-Session 支持不同的存储选项,如文件系统、Redis、数据库等。我们可以根据项目的需求选择合适的存储后端【本文就以Redis为例~】。
进去看一下这个类,分析它的open_session
方法:
第一句,上图箭头所指session_cookie_name
是啥嘞?
其实就是获取客户端中session的Name【如上图所示】。
如果用户第一次请求,继续分析源码:
而在用户这个请求结束的时候会执行对应的save_session
方法:
通过set_cookie
,客户端那就会存有uuid生成的随机字符串(唯一标识,下次请求携带,服务器端就可以认出来啦~)。
RedisSessionInterface
类参数如下:
还有第二种使用redis保存session的方法:
from flask import Flask, session
from flask.ext.session import Session
from redis import Redis
app = Flask(__name__)
app.secret_key = 'GuHanZhe'
app.config['SESSION_TYPE'] = 'redis'
app.config['SESSION_REDIS'] = Redis(host='127.0.0.1', port='6379')
app.config['SESSION_PERMANENT'] = False # 设置会话是否是永久的
app.config['SESSION_USE_SIGNER'] = True # 使用签名来保护会话数据
app.config['SESSION_KEY_PREFIX'] = 'myapp_' # 自定义会话键前缀
Session(app)
@app.route('/login')
def login():
session['name_txt'] = 'guhanzhe'
return 'Login'
@app.route('/index')
def index():
name = session['name_txt']
print(name)
return 'Index'
if __name__ == '__main__':
app.run()
为啥这样也可以呢?
让我们进Session源码一探究竟:
上图中config['SESSION_USE_SIGNER']
的作用(前面其实看到过~):