Flask中flask-session

Flask中flask-session

Flask-Session是一个为Flask应用程序开发的工具,允许您轻松处理服务器端会话。会话是存储和追踪用户特定数据的方式。例如,当用户登录到应用程序时,他们的状态(即登录状态)可以保存在会话中,使他们能够在整个应用程序中移动而无需重新登录。

默认情况下,Flask存储会话数据在客户端(浏览器)的cookie中。这对于一些应用程序来说可能是足够的,但是在某些情况下,您可能希望在服务器端存储会话数据。这就是Flask-Session发挥作用的地方。Flask-Session扩展允许您将会话数据存储在各种位置,包括:

  • Redis
  • Memcached
  • 文件系统
  • MongoDB
  • SQLAlchemy(支持各种数据库,包括PostgreSQL,MySQL等)

使用Flask-Session的一个主要优点是它允许您轻松切换会话存储类型,而无需更改应用程序代码。这意味着您可以根据应用程序的需要来选择最适合的存储方案。

下面是几个更完整的使用Flask-Session将会话数据存储在不同地方的例子。这些例子都包含了一些更详细的配置选项,以及更复杂的路由处理。

注意 :以下示例假定你已经配置并运行了相应的存储系统(例如,你已经运行了一个Redis服务器,并已经安装了redis Python包)。而且,你还需要根据实际情况修改配置选项。

例1:使用Redis存储会话数据

python 复制代码
from flask import Flask, session
from flask_session import Session

app = Flask(__name__)
app.config['SECRET_KEY'] = 'super secret key'
app.config['SESSION_TYPE'] = 'redis'
app.config['SESSION_REDIS'] = 'redis://localhost:6379'

Session(app)

@app.route('/')
def index():
    if 'visit_count' in session:
        session['visit_count'] += 1
    else:
        session['visit_count'] = 1
    return 'You have visited this page {} times'.format(session['visit_count'])

例2:使用Memcached存储会话数据

python 复制代码
from flask import Flask, session
from flask_session import Session

app = Flask(__name__)
app.config['SECRET_KEY'] = 'super secret key'
app.config['SESSION_TYPE'] = 'memcached'
app.config['SESSION_MEMCACHED'] = 'localhost:11211'

Session(app)

@app.route('/')
def index():
    if 'visit_count' in session:
        session['visit_count'] += 1
    else:
        session['visit_count'] = 1
    return 'You have visited this page {} times'.format(session['visit_count'])

例3:使用MongoDB存储会话数据

python 复制代码
from flask import Flask, session
from flask_session import Session

app = Flask(__name__)
app.config['SECRET_KEY'] = 'super secret key'
app.config['SESSION_TYPE'] = 'mongodb'
app.config['SESSION_MONGODB'] = 'mongodb://localhost:27017'
app.config['SESSION_MONGODB_DB'] = 'mydb'
app.config['SESSION_MONGODB_COLLECT'] = 'mysession'

Session(app)

@app.route('/')
def index():
    if 'visit_count' in session:
        session['visit_count'] += 1
    else:
        session['visit_count'] = 1
    return 'You have visited this page {} times'.format(session['visit_count'])

例4:使用SQLAlchemy(和任何支持的数据库)存储会话数据

python 复制代码
from flask import Flask, session
from flask_session import Session
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SECRET_KEY'] = 'super secret key'
app.config['SESSION_TYPE'] = 'sqlalchemy'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:tmp/test.db'  # 使用SQLite数据库
app.config['SESSION_SQLALCHEMY'] = SQLAlchemy(app)  # 使用Flask-SQLAlchemy

Session(app)

@app.route('/')
def index():
    if 'visit_count' in session:
        session['visit_count'] += 1
    else:
        session['visit_count'] = 1
    return 'You have visited this page {} times'.format(session['visit_count'])

这些例子都包含一个路由,当用户访问该路由时,它会检查会话中是否有visit_count键。如果有,就将它的值加一,如果没有,就设置它的值为1。然后,它会返回一个消息告诉用户他们已经访问了这个页面多少次。这个计数器在所有的用户请求之间都会保持,因为它被保存在会话中。

相关推荐
小陈工36 分钟前
Python安全编程实践:常见漏洞与防护措施
运维·开发语言·人工智能·python·安全·django·开源
zopple6 小时前
常见的 Spring 项目目录结构
java·后端·spring
2401_874732537 小时前
为你的Python脚本添加图形界面(GUI)
jvm·数据库·python
FreakStudio7 小时前
0 元学嵌入式 GUI!保姆级 LVGL+MicroPython 教程开更,从理论到实战全搞定
python·单片机·嵌入式·面向对象·电子diy
cjy0001118 小时前
springboot的 nacos 配置获取不到导致启动失败及日志不输出问题
java·spring boot·后端
小江的记录本9 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
sheji34169 小时前
【开题答辩全过程】以 基于springboot的校园失物招领系统为例,包含答辩的问题和答案
java·spring boot·后端
剑穗挂着新流苏3129 小时前
117_PyTorch 实战:利用训练好的模型进行单张图片验证
人工智能·python·深度学习
程序员cxuan9 小时前
人麻了,谁把我 ssh 干没了
人工智能·后端·程序员
Lethehong10 小时前
Python Selenium全栈指南:从自动化入门到企业级实战
python·selenium·测试工具·自动化