我正在使用服务器端会话,但后来我发现它们仍然依赖于客户端会话,因此我想要更好地掌握存储化合物的细节在会议中,但是很小的结构。
我们在会话中存储了一个计数器i
。在前3个请求中,我们在dict a
中插入一个新密钥:值对。
在第三次和后续重新加载(请求)时,下面的代码卡在elif session['counter']['i'] == 2:
条件上。第三个永远不会到达。为什么呢?
from flask import Flask, session, render_template_string
app = Flask(__name__)
app.config['SECRET_KEY'] = 'KLMNOP'
@app.before_first_request
def ensure_session_is_initialized():
if not session.has_key('a'):
session['a'] = {}
if not session.has_key('counter'):
session['counter'] = {}
session['counter']['i'] = 0
@app.route('/')
def index():
session['counter']['i'] += 1
if session['counter']['i'] == 1:
session['a']['1'] = 'K'
elif session['counter']['i'] == 2:
session['a']['2'] = 'L'
elif session['counter']['i'] == 3:
session['a']['3'] = 'M'
return render_template_string('''
<body>
{% for alpha in session %}
KEY1: {{ alpha }}<br />
{% for num in session[alpha] %}
KEY2KEY2: {{ num }}:{{ session[alpha][num] }}<br />
{% endfor %}
{% endfor %}
</body>
''')
if __name__ == '__main__':
app.run(debug=True)
更新
thangtn找到了答案,但为独立代码提供理由也很好
session = {}
session['counter'] = {}
session['counter']['i'] = 0
for i in range(5):
session['counter']['i'] += 1
print session['counter']['i']
按照我们的预期打印5
,但视图函数中类似的“复合字典”代码需要修改。
答案 0 :(得分:1)
当session ['counter'] ['i] == 1时,我发现会话没有更新session ['counter']的值。这就是你的if子句在session ['counter']停止的原因[ 'i'] == 2.当我通过重新分配session ['counter']的值来更新'i'时,我还没弄清楚为什么你的代码可以工作:
def index():
i = session['counter']['i'] + 1
session['counter'] = {'i': i}
...