在客户端会话中存储复合词典

时间:2017-02-06 01:26:33

标签: python session flask

我正在使用服务器端会话,但后来我发现它们仍然依赖于客户端会话,因此我想要更好地掌握存储化合物的细节在会议中,但是很小的结构。

我们在会话中存储了一个计数器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,但视图函数中类似的“复合字典”代码需要修改。

1 个答案:

答案 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}
    ...