Python 在Flask中,会话如何传递到模板以及应用程序功能之间?
在我对Flask会话进行调查的过程中,我试图更好地理解Flask会话的工作原理Python 在Flask中,会话如何传递到模板以及应用程序功能之间?,python,session,flask,proxy,Python,Session,Flask,Proxy,在我对Flask会话进行调查的过程中,我试图更好地理解Flask会话的工作原理 根据会话的说法,对象本身是一个 我的理解(也就是说,很可能在某种程度上是错误的,这就是这个问题所涉及的=)是什么意思: 代理会话对象从应用程序访问,用于根据需要修改读取的数据 通常,代理-会话会立即将其更改转移到代理-会话(代理-会话中的会话除外) 如果代理-会话忙(如果是多线程应用程序),代理-会话将等待代理-会话可用,然后将其更改传输到代理-会话 模板接收“原始”会话(即代理的-会话),因此没有能力/需要
根据
会话
的说法,对象本身是一个
我的理解(也就是说,很可能在某种程度上是错误的,这就是这个问题所涉及的=)是什么意思:
会话
对象从应用程序访问,用于根据需要修改读取的数据
会话
会立即将其更改转移到代理-会话
(代理-会话
中的会话除外)
会话
忙(如果是多线程应用程序),代理-会话
将等待代理-会话
可用,然后将其更改传输到代理-会话
会话
),因此没有能力/需要访问会话
is
是可变的,我假设它的id在session的长度内保持不变(尽管内容可以修改)
会话
(代理对象,可通过会话获得。\u get\u current\u object()
)不应更改其ID
从烧瓶导入(
瓶子
渲染模板,
一场
)
app=烧瓶(名称)
app.secret\u key='一些随机密钥'
@app.route(“/create/”)
def create():
会话['example']=['one','two']
打印ID()
返回str(会话['example'])
@app.route(“/modify/”)
def modify():
会话['example'].append('three')
打印ID()
返回render\u template('my\u template.html',id=id)
@app.route(“/display/”)
def display():
打印ID()
返回str(会话['example'])
def print_ids():
进口检验
调用_function=inspect.stack()[1][3]
打印(“”)
打印(调用函数+”:会话ID为:{}。格式(ID(会话)))
打印(调用函数+”:会话['example']ID为{}。格式(ID(会话['example']))
打印('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
打印(调用函数+“:session.\u get\u current\u object()ID为:{}”。格式(ID(session.\u get\u current\u object()))
打印(调用函数+“:session.\u get\u current\u object()['example']ID为:{}”。格式(ID(session.\u get\u current\u object()['example']))
my_template.html
显示会话['example']
{%if会话['example']%}
{{session['example']}
会话ID为:{ID(会话)}
会话['example']ID为:{ID(会话['example'])}
{%else%}
未设置会话['example']=(
{%endif%}
我们的想法是打印代理-session
、session['example']
(这是一个列表)、代理-session
(即session.\u get_current_object()
)和代理-session['example']
(即session.\u get_current_object()['example']
)的id(session)和id(会话['example'])
以跟踪在何处使用的内容
结果如下:
../create/
#id(会话)4338311808
#id(会话获取当前对象())4343709776
#id(会话['示例])43654376
#id(session._get_current_object()['example'])4343654376
…/修改/
#id(会话)4338311808
#id(会话获取当前对象())4344315984
#id(会话['example'])4343652720
#id(session._get_current_object()['example'])4343652720
呈现my_template.html
#id(会话)4344315984
#id(会话['example'])4343652720
…/显示/
#id(会话)4338311808
#id(会话获取当前对象())4344471632
#id(会话['示例])4341829576
#id(session._get_current_object()['example'])4341829576
#再来一次
…/显示/
#id(会话)4338311808
#id(会话获取当前对象())4344471632
#id(会话['example'])4344378072
#id(session._get_current_object()['example'])4344378072
我努力想了解的是:
会话['example']
和会话的ID.\u get\u current\u object()['example']
在每次点击显示时都会更改(以及每一个其他方法,但特别是显示,因为它不会修改任何内容,我希望所有ID都保持不变)
session.\u get\u current\u object()
的id会更改,而session
的id不会更改
session['example']
和session.\u get\u current\u object()['example']
的ID在任何函数的上下文中都是相同的,因此我假设如果一个对象被更改,那么这两个对象都会被更改,因为它们是相同的对象
话虽如此,但考虑到会话,\u get\u current\u object()['example']
在内部