我正在玩 Flask,努力了解会话如何工作的细节,我正在使用:
Python 3.6.1
烧瓶 0.12.2
Flask 文档清楚地说明(粗体是我的):
session 对象的工作方式与普通的 dict 非常相似,不同之处在于它跟踪修改。
这是一个代理。
...
关于代理的部分提到(再次,粗体是我的):
如果您需要访问被代理的底层对象,您可以使用该
_get_current_object()
方法
session._get_current_object()
因此,对于请求,底层对象 ( ) 必须保持不变,或者如本答案和评论所建议的那样,一个线程。但是,它不会持续存在,也不会在请求内部,也不会线程。
这是一个演示代码:
import threading
from flask import (
Flask,
session,
)
app = Flask(__name__)
app.secret_key = 'some random secret key'
@app.route('/')
def index():
print("session ID is: {}".format(id(session)))
print("session._get_current_object() ID is: {}".format(id(session._get_current_object())))
print("threading.current_thread().ident is: {}".format(threading.current_thread().ident))
print('________________________________')
return 'Check the console! ;-)'
如果你将运行上面的 Flask 应用程序,并反复转到will/
返回的session._get_current_object()
--id,偶尔会更改,而threading.current_thread().ident
从不更改。
这导致我提出以下问题:
究竟返回的是什么session._get_current_object()
?
我知道它是一个对象底层session
代理,但是这个底层对象绑定到什么(如果它不是请求而不是线程,如果有什么我希望它永远不会改变,对于上面的简单应用程序)?
蝴蝶不菲
慕容森
相关分类