为什么 flask session 对象不需要实例化?
Why doesn't flask session object need to be instantiated?
阅读文档我了解到 flask 定义了一个 class flask.session。
让我感到困惑的是,人们在使用它时并没有实例化session的对象class,而是直接使用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'
我也想知道这是否与文档中所说的会话作为代理有关。我读了 'Notes on Proxies' 但不太明白。
好问题。
它在烧瓶中初始化globals.py
https://github.com/pallets/flask/blob/master/flask/globals.py
session = LocalProxy(partial(_lookup_req_object, 'session'))
因此,当您从 flask 导入时,您是从其包 __init__.py
导入,这会从 globals.py
中提取会话并对其进行初始化。当您直接导入它时,您会获取对它的引用。
我应该澄清一下,会话本身不是 class。它是 LocalProxy class 的一个实例,它是请求上下文的代理。
阅读文档我了解到 flask 定义了一个 class flask.session。
让我感到困惑的是,人们在使用它时并没有实例化session的对象class,而是直接使用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'
我也想知道这是否与文档中所说的会话作为代理有关。我读了 'Notes on Proxies' 但不太明白。
好问题。
它在烧瓶中初始化globals.py
https://github.com/pallets/flask/blob/master/flask/globals.py
session = LocalProxy(partial(_lookup_req_object, 'session'))
因此,当您从 flask 导入时,您是从其包 __init__.py
导入,这会从 globals.py
中提取会话并对其进行初始化。当您直接导入它时,您会获取对它的引用。
我应该澄清一下,会话本身不是 class。它是 LocalProxy class 的一个实例,它是请求上下文的代理。