在其他路由中读取会话值时,获取“ KeyError:'example'”

时间:2019-10-11 17:20:29

标签: python session flask

我有一个问题,因为我想在会话中包含值。当我将值保存在一个app.route中,以后需要转到另一个链接并使用此值时,它将显示KeyError。我在做什么错了?

from flask import Flask, render_template, request, session
from OPTYMALIZACJA import OPTYMALIZACJA

app = Flask(__name__)  
app.secret_key = "abc" 
app.config['SESSION_TYPE'] = 'memcached' 

@app.route('/',methods = ['POST', 'GET'])
def first():
    #calculation instructions
    session['example'] = 'example1'
    return render_template('index.html')

@app.route('/export')
def second():
    s = session['example']
    print(s)
    return render_template('index.html')

在index.html中,我具有指向localhost / export页面的链接。

2 个答案:

答案 0 :(得分:0)

您的代码对我有用,通常最好的做法是使用s = session['example']来防止类似的KeyError,因此请代替s = session.get('example', 'default value') from flask import Flask, session app = Flask(__name__) app.secret_key = "abc" app.config['SESSION_TYPE'] = 'memcached' @app.route('/',methods = ['POST', 'GET']) def first(): #calculation instructions session['example'] = 'example1' return session['example'] @app.route('/export') def second(): s = session.get('example', 'YourDefaultValueHere') print(s) return session['example'] if __name__ == '__main__': app.run()

{{1}}

答案 1 :(得分:0)

您发布的代码可以正常工作。

以下是您可以检查的一些内容:

  1. 请确保您用于保存在session的{​​{1}}中的密钥与您从{的first中获取的密钥完全相同。 {1}}。我知道您的示例代码已经显示了相同的密钥session,但是您的 actual 代码可能未使用相同的密钥,或者已从second中删除了它。

    您可以通过打印example(如session)来检查session的内容:

    session.items()
  2. 确保您正在访问更新dict的正确路由(print(session.items()) print(session['example']) # 127.0.0.1 - - [12/Oct/2019 16:03:52] "GET /export HTTP/1.1" 200 - # dict_items([('example', 'example1')]) # example1 )。例如,当我测试您的示例代码时,我不小心刷新了 / export 而不是在 / 处访问正确的路由。