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()