尝试替换时 Django 会话字典 KeyError
Django session dictionary KeyError when attempting to replace
我正在后端处理第三方授权问题并遇到奇怪的会话存储行为。
当我检测到第三方会话授权失效时,我重新认证并尝试更新会话中的数据,但不起作用。
问题是,在我从会话中删除密钥后,当我在获得更新信息后尝试替换它时,出现 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
我目前正在探索此策略的替代方案,但我发现此行为与 "How to use sessions" 文档描述的类似字典的行为相矛盾,因此值得发布。
有意思。快速测试显示 del item
行出现 KeyError,而不是您所说的会发生的地方。
显然你必须先检查密钥是否存在,然后才能删除它:
def my_session_thing(invalidate=False):
if invalidate and 'my_session_dict' in self.request.session:
至于为什么这在不应该的时候是必要的,我不知道(我闻到了 属性 恶作剧的味道)。似乎在调用 __del__
或 pop
.
时会话未加载其存储
我正在后端处理第三方授权问题并遇到奇怪的会话存储行为。
当我检测到第三方会话授权失效时,我重新认证并尝试更新会话中的数据,但不起作用。
问题是,在我从会话中删除密钥后,当我在获得更新信息后尝试替换它时,出现 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
我目前正在探索此策略的替代方案,但我发现此行为与 "How to use sessions" 文档描述的类似字典的行为相矛盾,因此值得发布。
有意思。快速测试显示 del item
行出现 KeyError,而不是您所说的会发生的地方。
显然你必须先检查密钥是否存在,然后才能删除它:
def my_session_thing(invalidate=False):
if invalidate and 'my_session_dict' in self.request.session:
至于为什么这在不应该的时候是必要的,我不知道(我闻到了 属性 恶作剧的味道)。似乎在调用 __del__
或 pop
.