flask-session

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

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

pip install flask-session

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

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


SQLAlchemy存储session的基本配置

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

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_session import Session
app = Flask(__name__)
db = SQLAlchemy()
session_store = Session(app)
​
class Config(object):
    DEBUG = True
    SECRET_KEY = "*(%#4sxcz(^(#$#8423"  # session秘钥
    # 数据库连接配置
    # SQLALCHEMY_DATABASE_URI = "数据库类型://数据库账号:密码@数据库地址:端口/数据库名称?charset=utf8mb4"
    SQLALCHEMY_DATABASE_URI = "mysql://root:123@127.0.0.1:3306/students?charset=utf8mb4"
    # 动态追踪修改设置,如未设置只会提示警告
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 查询时会显示原始SQL语句
    SQLALCHEMY_ECHO = False
    # 把session通过SQLAlchmey保存到mysql中
    SESSION_TYPE = "sqlalchemy" # session类型为sqlalchemy
    SESSION_SQLALCHEMY = db     # SQLAlchemy对象
    SESSION_SQLALCHEMY_TABLE = 'db_session' # session要保存的表名称
    SESSION_PERMANENT = True    # 如果设置为True,则关闭浏览器session就失效
    SESSION_USE_SIGNER =  False  # 是否对发送到浏览器上session的cookie值进行加密
    SESSION_KEY_PREFIX = "session:" # sessionID的前缀,默认就是 session:
​
app.config.from_object(Config)
db.init_app(app)
session_store.init_app(app)
​
from flask import session
@app.route("/set")
def set_session():
    session["uname"] = "xiaoming"
    session["age"]   = 18
    return "ok"
​
@app.route("/get")
def get_session():
    print(session.get("uname"))
    print(session.get("age"))
    return "ok"
​
@app.route("/del")
def del_session():
​
    print(session.pop("uname"))
    print(session.pop("age"))
    return "ok"
​
if __name__ == '__main__':
    with app.app_context():
        db.create_all()
    app.run()

redis保存session的基本配置

这个功能必须确保,服务器必须已经安装了redis而且当前项目虚拟环境中已经安装了redis扩展库

pip install flask-redis -i https://pypi.douban.com/simple

# flask-redis是第三方开发者为了方便我们在flask框架中集成redis数据库操作所封装一个redis操作库、
# 在flask中要基于flask-redis进行数据库则可以完成以下3个步骤即可:
# 1. 引入flaskRedis并实例化
from flask.ext.redis import FlaskRedis
redis = FlaskRedis()
redis.init(app)
# 2. 在config配置中使用 REDIS_URL配置redis的url地址
REDIS_URL = "redis://:password@localhost:6379/0"
​
# 3. 使用实例化后的flaskRedis对象即可操作redis数据库,这个库就是我们之前在django中操作redis时使用库
# 直接通过 redis对象.命令方法(参数1, 参数2...)
redis.setex("sms",5 * 60 , "10010")

在redis中保存session,代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_session import Session
app = Flask(__name__)
db = SQLAlchemy()
session_store = Session(app)
​
from flask_redis import FlaskRedis
redis_session = FlaskRedis()
class Config(object):
    DEBUG = True
    SECRET_KEY = "*(%#4sxcz(^(#$#8423"  # session秘钥
    SQLALCHEMY_DATABASE_URI = "mysql://root:123@127.0.0.1:3306/students?charset=utf8mb4"
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_ECHO = False
    # redis连接地址  redis://用户名:密码@IP地址:端口/数据库名
    REDIS_URL = "redis://:@127.0.0.1:6379/15"
    # 把session保存到redis
    SESSION_TYPE = "redis"     # session存储方式为redis
    SESSION_PERMANENT = False  # 如果设置session的生命周期是否是会话期, 为True,则关闭浏览器session就失效
    SESSION_USE_SIGNER = False # 是否对发送到浏览器上session的cookie值进行加密
    SESSION_KEY_PREFIX = "session:" # 保存到redis的session数的名称前缀
    # session保存数据到redis时启用的链接对象
    SESSION_REDIS = redis_session # 用于连接redis的配置
​
app.config.from_object(Config)
db.init_app(app)
session_store.init_app(app)
redis_session.init_app(app)
​
​
from flask import session
@app.route("/set")
def set_session():
    session["uname"] = "xiaoming"
    session["age"]   = 18
    return "ok"
​
@app.route("/get")
def get_session():
    print(session.get("uname"))
    print(session.get("age"))
    return "ok"
​
@app.route("/del")
def del_session():
​
    print(session.pop("uname"))
    print(session.pop("age"))
    return "ok"
​
if __name__ == '__main__':
    with app.app_context():
        db.create_all()
    app.run()
原文地址:https://www.cnblogs.com/hsqKTm/p/14821587.html