在Flask中使用会话时的KeyError

时间:2015-08-26 15:49:45

标签: python flask

所以我试图使用flask从一个html页面传递一个值到另一个页面。我写的代码看起来像这样:

from flask import Flask, render_template
from flask import request, session, url_for,abort,redirect

app = Flask(__name__)

app.config['SECRET_KEY'] = 'oh_so_secret'


@app.route('/'):
def first():
    session['this_one']='hello'
    render('template.html')

@app.route('/second')
def second():
   it=session['this_one']
    render('other_page.html')

if __name__ == '__main__':
    app.run(debug=True)

但是当我运行这个时,我得到一个KeyError:this_one

所以,今天它重新启动了系统。然后我做了一些改变:

@app.route('/'):
def first():
    session['this_one']='goodbye'
    render('template.html')

@app.route('/second')
def second():
   it=session['this_one']
   render('other_page.html')

,第二个功能仍在返回hello

所以似乎session字典没有像我希望的那样被覆盖。

跟进

这是一个真正的谜,它有一天工作而不是下一个没有做出任何改变。现在在溃败('/')我正在设置一个列表:

@app.route('/'):
def first():
    session['this_one']='hello'
    session['a_list']=['a','b','c']
    render('template.html')

使用print命令在第二个函数中调用它:

@app.route('/second')
def second():
    it=session['this_one']
    print(session['a_list'])
    render('other_page.html')

并返回一个空列表[]

4 个答案:

答案 0 :(得分:2)

假设代码中的所有格式错误都只是拼写错误,那么您的代码就会按预期运行。

from flask import Flask, session

app = Flask(__name__)
app.config['SECRET_KEY'] = 'oh_so_secret'


@app.route('/')
def first():
    session['this_one'] = 'hello'
    return 'Hello was saved into session[this_one].'


@app.route('/second')
def second():
    return 'Value inside session[this_one] is {}.'.format(session['this_one'])


if __name__ == '__main__':
    app.run(debug=True)
  1. 打开http://127.0.0.1:5000/,您将获得:Hello was saved into session[this_one]
  2. 打开http://127.0.0.1:5000/second,您将获得:Value inside session[this_one] is hello。这取自会议。

答案 1 :(得分:2)

您的代码工作正常(除了缩进问题,我认为这是拼写错误而不是实际代码)。必须发生的是在第一页之前访问的第二页。您可以使用异常处理来检查KeyError并在遇到第一页时重定向到第一页。

答案 2 :(得分:2)

在我的头撞到桌子两周后,我发现错误,我正在渲染错误的页面..我的原始代码实际上看起来像:

from flask import Flask, render_template
from flask import request, session, url_for,abort,redirect

app = Flask(__name__)

app.config['SECRET_KEY'] = 'oh_so_secret'

@app.route('/'):
    def pre-first():
    return render_template('template_old.html')

@app.route('/first'):
def first():
    greeting=request.form['greeting']
    session['this_one']=greeting
    render('template.html')

@app.route('/second')
def second():
   it=session['this_one']
   render('other_page.html')

if __name__ == '__main__':
    app.run(debug=True)

将第一个函数更改为:

@app.route('/'):
def pre-first():
    return render_template('template.html')

它有效。

答案 3 :(得分:1)

我遇到了同样的错误。我的烧瓶应用程序使用flask-login 0.4.1在我的测试服务器上运行良好。但是,当我迁移到开发服务器时,在会话中找不到keyerror'user_id'。我惊讶为什么会给出此错误,因为相同的代码在我的测试服务器上能正常工作。后来,经过调查,我发现生产服务器正在使用flask-login 0.5.0更新了一些导致错误的默认值。因此,我将flask-login版本降级为0.4.1,然后重新启动了apache服务器,然后我的应用程序运行正常。