Flask-插件

一,Flask-session

  Flask-session跟框架自带的session的区别

    框架自带的session是通过请求上下文放入Local中的,如果我们想把session放入别的地方怎么办,比如redis或者数据库等,Flask-session就提供了这些功能

  下载安装

pip install flask-session

  导入并实例化

from flask-session import Session # 导入

def create_app():
    app = Flask(__name__)
    app.config.from_object("settings.BaseConfig")

    app.register_blueprint(xBule)
    # 实例化
    Session(app)

    return app

  配置文件 

class BaseConfig(object):
    # ...
    SESSION_TYPE = "redis"
    SESSION_REDIS = Redis(host="127.0.0.1",port="6379")

  实现原理

# 原生session的实现原理
    # 请求进来先把request以及session封装到RequestContext对象中
    # 调用push方法通过LocalStark放入到Local中
    # 这时候放入到Local中的ctx.session还是None
    session_interface = self.app.session_interface
    self.session = session_interface.open_session(self.app,self.request)
    # 然后调用了session_interface中的open_session和save_session方法

# Flask-session的实现原理
    # Session(app)
    def __init__(self,app=None):
        self.app = app
        if app is not None:
            self.init_app(app)
    # 执行了init_app方法
    def init_app(self,app):
        # 把Session类的_get_interface(app)赋值给了app.session_interface
        # 相当于self.session = Session()._get_interface(app).open_session(self.app,self.request)
        app.session_interface = self._get_interface(app) 
        # _get_interface方法找配置文件中的配置的类里的方法,从而实现了session存储地方的不同

猜你喜欢

转载自www.cnblogs.com/lianyeah/p/10216001.html