代码之家  ›  专栏  ›  技术社区  ›  titiree

为什么不需要实例化flask会话对象?

  •  1
  • titiree  · 技术社区  · 7 年前

    阅读文档,我了解flask定义了一个类flask.session。

    让我困惑的是,当人们使用会话类时,他们不会实例化会话类的对象,而是直接使用会话,如下代码所示:

    from flask import Flask, session
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        session['key'] = 'value'
    

    我不明白为什么代码不应该看起来像这样:

    from flask import Flask, session
    
    app = Flask(__name__)
    s = session() # so s is an instance of the flask.session class
    
    @app.route('/')
    def index():
        s['key'] = 'value'
    

    我还想知道这是否与会话作为代理有关,如文档中所述。我读了《委托书上的笔记》,但听不太懂。

    1 回复  |  直到 7 年前
        1
  •  0
  •   AArias    7 年前

    好问题。

    在烧瓶中初始化 globals.py

    https://github.com/pallets/flask/blob/master/flask/globals.py

    session = LocalProxy(partial(_lookup_req_object, 'session'))
    

    所以当你从瓶子里进口的时候,你是从瓶子的包装里进口的。 __init__.py 它将会话从 全局.py 并初始化它。当您直接导入它时,会获取对它的引用。

    我要澄清的是,会议本身不是一门课。它是localproxy类的一个实例,它是请求上下文的代理。

    推荐文章