Flask Session储存在redis or SQLAlchemy里

flask-session

允许设置session到指定存储的空间中, 文档:

安装命令: https://pythonhosted.org/Flask-Session/

pip install flask-Session

安装flask-redis

pip install flask-redis

使用session之前,必须配置一下配置项:

SECRET_KEY = "*(%#4sxcz(^(#$#8423" # session秘钥

flask-

redis保存session的基本配置

配置文件信息:

from flask import Flask, session
from flask_redis import FlaskRedis
from flask_session import Session


app = Flask(__name__)

redis = FlaskRedis()
session_store = Session()

class Config():
    # DEBUG调试模式
    DEBUG = True
    # json多字节转unicode编码
    JSON_AS_ASCII = False
    # 数据库链接配置
    SECRET_KEY = "*(%#4sxcz(^(#$#8423"
    # session存储方式为redis
    SESSION_TYPE = "redis"
    # session保存数据到redis时启用的链接对象
    SESSION_REDIS = redis
    # 如果设置session的生命周期是否是会话期, 为True,则关闭浏览器session就失效
    SESSION_PERMANENT = True
    # 是否对发送到浏览器上session的cookie值进行加密
    SESSION_USE_SIGNER = True
    # 保存到redis的session数的名称前缀
    SESSION_KEY_PREFIX = "session:"
    # redis的链接配置
    REDIS_URL = "redis://localhost:6379/1"


app.config.from_object(Config)
# 初始化redis
redis.init_app(app)
# 初始化session_store
session_store.init_app(app)

@app.route('/')
def index():
    session['username'] = 'xiaohui'
    return 'ok'


@app.route('/get_session')
def get_session():
    print(session['username'])
    return 'ok'


@app.route('/redis1')
def set_redis():
    redis.set('username','xiaohuihui')
    redis.hset('brother','zhangfei','17')
    return 'ok'


@app.route('/redis2')
def get_redis():
    user = redis.get('username').decode()
    print(user)
    bother = redis.hgetall('brother')
    print(bother)
    print(bother['zhangfei'.encode()].decode())

    return 'ok'

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

SQLAlchemy存储session的基本配置

需要手动创建session表,在项目第一次启动的时候,使用db.create_all()来完成创建。

db = SQLAlchemy(app)

app.config['SESSION_TYPE'] = 'sqlalchemy'  # session类型为sqlalchemy
app.config['SESSION_SQLALCHEMY'] = db # SQLAlchemy对象
app.config['SESSION_SQLALCHEMY_TABLE'] = 'session' # session要保存的表名称
app.config['SESSION_PERMANENT'] = True  # 如果设置为True,则关闭浏览器session就失效。
app.config['SESSION_USE_SIGNER'] = False  # 是否对发送到浏览器上session的cookie值进行加密
app.config['SESSION_KEY_PREFIX'] = 'session:'  # 保存到session中的值的前缀

Session(app)

代码:

from flask import Flask,session
from flask_redis import FlaskRedis
from flask_session import Session
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy()
redis = FlaskRedis()
session_store = Session()
class Config():
    # DEBUG调试模式
    DEBUG = True
    # json多字节转unicode编码
    JSON_AS_ASCII = False
    SECRET_KEY = "*(%#4sxcz(^(#$#8423"
    # 数据库链接配置
    # SQLALCHEMY_DATABASE_URI = "mysql://账号:密码@IP/数据库名?编码"
    SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/student?charset=utf8mb4"
    # 动态追踪修改设置,如未设置只会提示警告
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 查询时会显示原始SQL语句
    SQLALCHEMY_ECHO = True

    # redis的链接配置
    REDIS_URL = "redis://localhost:6379/1"

    # 数据库保存session
    SESSION_TYPE = 'sqlalchemy'  # session类型为sqlalchemy
    SESSION_SQLALCHEMY = db  # SQLAlchemy对象
    SESSION_SQLALCHEMY_TABLE = 'tb_session'  # session要保存的表名称
    SESSION_PERMANENT = True  # 如果设置为True,则关闭浏览器session就失效。
    SESSION_USE_SIGNER = False  # 是否对发送到浏览器上session的cookie值进行加密
    SESSION_KEY_PREFIX = 'session:'  # 保存到session中的值的前缀

db.init_app(app)
app.config.from_object(Config)
redis.init_app(app)
session_store.init_app(app)

@app.route("/")
def index():
    session["username"] = "xiaohui"
    return "Ok"

@app.route("/get_session")
def get_session():
    return session["username"]

if __name__ == '__main__':
    # with app.app_context():
    #     db.create_all()
    app.run()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将 Flask Session 存储到 Redis ,可以使用第三方库 Flask-SessionRedis-Py。下面是一个示例: ```python from flask import Flask, session from redis import Redis from flask_session import Session import os app = Flask(__name__) app.config['SESSION_TYPE'] = 'redis' app.config['SESSION_REDIS'] = Redis(host='localhost', port=6379, password='password') app.config['SESSION_COOKIE_NAME'] = 'flask_session' app.config['SESSION_PERMANENT'] = False app.config['SESSION_USE_SIGNER'] = True app.config['SESSION_KEY_PREFIX'] = 'session:' app.config['SECRET_KEY'] = os.urandom(24) Session(app) @app.route('/') def index(): session['username'] = 'Alice' return 'Hello, World!' @app.route('/user') def user(): username = session.get('username') return f'Hello, {username}!' if __name__ == '__main__': app.run() ``` 在上面的示例,我们首先配置了 Flask-Session,使用了 Redis 作为 Session 存储后端。在配置,我们指定了 Redis 的主机名、端口号、密码,以及 Session 的一些其他选项,比如 Cookie 名称、前缀等。接着,我们创建了一个路由函数 `/`,在其存储了一个名为 `username` 的 Session 数据。然后,我们创建了另一个路由函数 `/user`,在其检索了名为 `username` 的 Session 数据,并返回了一个带有欢迎消息的字符串。 需要注意的是,为了使用 Redis 作为 Session 存储后端,我们需要在系统安装 Redis,并安装 Redis-Py 库。此外,我们还需要在配置指定 Redis 的主机名、端口号、密码等信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值