2016-09-01 54 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