(二十四)Flask之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']的作用(前面其实看到过~):

转载请说明出处内容投诉
CSS教程_站长资源网 » (二十四)Flask之flask-session组件

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买