【flask】07-flask中的三个session

xiaoxiao2022-06-11  27

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支持保存到多个地方,例如:

redismemcachedfilesystemmongodbsqlalchmey

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' 保存数据到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()
转载请注明原文地址: https://www.6miu.com/read-4930394.html

最新回复(0)