我有一个问题,因为我想在会话中包含值。当我将值保存在一个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页面的链接。
答案 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)
您发布的代码可以正常工作。
以下是您可以检查的一些内容:
请确保您用于保存在session
的{{1}}中的密钥与您从{的first
中获取的密钥完全相同。 {1}}。我知道您的示例代码已经显示了相同的密钥session
,但是您的 actual 代码可能未使用相同的密钥,或者已从second
中删除了它。
您可以通过打印example
(如session
)来检查session
的内容:
session.items()
确保您正在访问更新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 而不是在 / 处访问正确的路由。