在App Engine中使用gae-sessions遇到问题,错误信息无帮助
我在我的开发环境中安装了gae-sessions,但是它似乎没有存储任何东西。这里有一个基本的例子:
session = get_current_session()
session.get('some_num', 3)
然后在其他函数中...
session = get_current_session()
session['some_num'] = 4
这是我在控制台看到的错误:
KeyError: 'some_num'
这个错误信息并没有什么帮助。我很确定我按照说明一步一步来做的,但可能我漏掉了什么?
编辑
appengine_config.py
from gaesessions import SessionMiddleware
import os
def webapp_add_wsgi_middleware(app):
app = SessionMiddleware(app, os.urandom(32))
return app
出问题的代码
class Test(webapp.RequestHandler):
def get(self):
session = get_current_session()
if session.is_active():
# set session['some_num'] to whatever was in there or three, otherwise
session['some_num'] = session.get('some_num', 3)
# later, session['some_num'] should exist and be equal to 3 ...
assert session['some_num'] == 3
# ... and is actually 'settable'
session['some_num'] = 4
else:
self.response.out.write("Session is NOT active")
.is_active()没有返回true。
2 个回答
2
看这个示例应用(在这里),所有的会话一开始都是不活跃的,只有在你第一次给它存值的时候,它才会自动变成活跃状态。你只需要用 session['foo'] = 'bar'
这样的方式给会话存一个值,它就会自动激活。
另外,注意不要那样生成 cookie 的键。就像在示例的 appengine_config.py 文档中提到的:
# suggestion: generate your own random key using os.urandom(64)
# WARNING: Make sure you run os.urandom(64) OFFLINE and copy/paste the output to
# this file. If you use os.urandom() to *dynamically* generate your key at
# runtime then any existing sessions will become junk every time you start,
# deploy, or update your app!
0
在你的代码中(现在的样子),你根本没有把 some_num
加入到你的会话字典里。你可以试试这样:
from gaesessions import get_current_session
session = get_current_session()
if session.is_active():
# set session['some_num'] to whatever was in there or three, otherwise
session['some_num'] = session.get('some_num', 3)
...
# later, session['some_num'] should exist and be equal to 3 ...
assert session['some_num'] == 3
# ... and is actually 'settable'
session['some_num'] = 4