2016-09-01 113 views
3

用下面的应用程序和瓶之间0.11.1不存留,我导航到用下面的函数呼叫相关联的路由,与给定结果:烧瓶会话变量请求

  • 创建():“1, 2,3' #行
  • 删除(1): '2,3' #行
  • 删除(2): '1,3' #预期 '3'
  • 保持():“1,2 ,3'#预计'1,3'或'3'

 

from flask import Flask, session 

app = Flask(__name__) 

@app.route('/') 
def create(): 
    session['list'] = ['1','2','3'] 
    return ",".join(session['list']) 

@app.route('/m') 
def maintain(): 
    return ",".join(session['list']) 

@app.route('/r/<int:id>') 
def remove(id): 
    session['list'].remove(str(id)) 
    return ",".join(session['list']) 

if __name__ == '__main__': 
    app.secret_key = "123" 
    app.run() 

这个问题是在主题this questionthis,并且this one相似,但我设置的密钥,而不是再生它,我肯定变量不超过允许的Cookie 4096个字节的。也许我错过了对Flask会话变量的更多基本理解?

回答

2

Flask使用CallbackDict来跟踪对会话的修改。

它只会在您设置或删除密钥时注册修改。在这里,您可以修改它不会检测到的值。试试这个:

@app.route('/r/<int:id>') 
def remove(id): 
    val = session['list'] 
    val.remove(str(id)) 
    session['list'] = val 
    return ",".join(session['list']) 

...,并与其他的变化一样,或者你可以尝试自己设置session.modified = True而不是触发检测。

4

the doc

注意,在可变结构修改不会拿起自动,在那种情况下,你必须在[modified属性]自己明确设置为True

尝试:

session['list'].remove(str(id)) 
session.modified = True