【flask】07-flask中的三个session

Flask 中有三个 session:
第一个:数据库中的 session,例如:db.session.add()
第二个:在 flask_session 扩展中的 session,使用:from flask_session importSession,使用
第三方扩展的 session 可以把信息存储在服务器中,客户端浏览器中只存储 sessionid。
第三个:flask 自带的 session,是一个请求上下文, 使用:from flask import session。自带的
session 把信息加密后都存储在客户端的浏览器 cookie 中。

具体用法
一、 flask自带的session
主要用于服务器端的状态保持

# 增删改查的方法类似字典
app.secret_key = 'a key for session'
@app.route('/test_session')
def demo():
    # 增
    session['user_age'] = 18
    session['user_height'] = 1.80
    # 改
    session['user_age'] = 20
    # 查
    user_age = session['user_age']
    user_height = session.get('user_height')
    # 删
    session.pop('user_height', None)
    
    return 'user_age:%s---user_height:%s' % (user_age, user_height)

二、 flask_session 扩展中的 session
flask中内置的session(即上面的session),是依据cookie存在的。
这个session支持保存到多个地方,例如:

  • redis
  • memcached
  • filesystem
  • mongodb
  • sqlalchmey

1.保存数据到redis

import redis
from flask import Flask, session
from flask_session import Session

app = Flask(__name__)
app.secret_key = 'a key for session'

app.config['SESSION_TYPE'] = 'redis'  # session类型为redis
app.config['SESSION_KEY_PREFIX'] = 'session:'  # 保存到session中的值的前缀
app.config['SESSION_REDIS'] = redis.Redis(host='127.0.0.1', port='6379', password='123123')  # 用于连接redis的配置

Session(app)


@app.route('/index')
def index():
    session['user_name'] = 'laowang'
    return 'success'
  1. 保存数据到sqlalchemy
from flask import Flask, session
from flask_session import Session as FSession
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.secret_key = 'a kye for session'

# 设置数据库链接
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123@127.0.0.1:3306/fssa?charset=utf8'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

# 实例化SQLAlchemy
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_KEY_PREFIX'] = 'session:'  # 保存到session中的值的前缀
FSession(app)


@app.route('/index')
def index():

    session['user_name'] = 'laowang'
    session['user_age'] = 20

    return 'success'

三、数据库SQLAlchemy中的session
简单理解就是

db.session.add()
db.session.commit

深入一点

在 flask_sqlalchemy.SQLAlchemy类的定义中有
self.session = self.create_scoped_session(session_options)
以及最后返回的
return orm.scoped_session(self.create_session(options), scopefunc=scopefunc)
可以追溯到 sqlalchemy.orm.session与sqlalchemy.orm.scoped_session的关系

# 测试代码 不能实现, 仅做演示
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine

engine = create_engine(
    "mysql+pymysql://root:root@127.0.0.1:3306/pro6?charset=utf8",
    max_overflow=0,  # 超过连接池大小外最多创建的连接
    pool_size=5,  # 连接池大小
)

#from sqlalchemy.orm.session import Session

SessionF = sessionmaker(bind=engine)
# session
session = SessionF()

print(session)

obj1 = Users(name='ctz', email='49274573@qq.com', extra='aaaa')

session.add(obj1)

session.commit()
session.close()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值