允许设置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:[email protected]: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")
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:[email protected]: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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。