我正在处理后端的第三方授权问题,遇到了奇怪的会话存储行为。在
当我检测到第三方会话授权无效时,我重新验证并尝试更新会话中的数据,但这不起作用。在
问题是,从会话中删除密钥后,在获得更新信息后尝试替换密钥时,会出现KeyError。在
def my_session_thing(invalidate=False):
if invalidate:
del self.request.session['my_session_dict']
self.request.session.modified = True
my_session_dict = self.request.session.get('my_session_dict')
if my_session_dict is not None:
self.current_session_dict = my_session_dict
return
my_new_session_dict = {
'foo': 'bar'
}
# ** Why does this raise a KeyError when invalidate is True? **
self.request.session['my_session_dict'] = my_new_session_dict
我目前正在探索这种策略的替代方法,但我发现这种行为与“如何使用会话”文档中描述的字典式行为相矛盾,因此值得发表。在
有趣。快速测试显示
del item
行上有一个键错误,而不是您所说的可能发生的地方。 显然,您必须先检查密钥是否存在,然后才能删除它:至于为什么这是必要的,而不应该这样做,我不知道(我闻到了地产恶作剧)。似乎会话在调用
__del__
或pop
时没有加载其存储。在相关问题 更多 >
编程相关推荐