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