Django会话字典键错误,尝试

2024-05-20 19:34:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理后端的第三方授权问题,遇到了奇怪的会话存储行为。在

当我检测到第三方会话授权无效时,我重新验证并尝试更新会话中的数据,但这不起作用。在

问题是,从会话中删除密钥后,在获得更新信息后尝试替换密钥时,会出现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

我目前正在探索这种策略的替代方法,但我发现这种行为与“如何使用会话”文档中描述的字典式行为相矛盾,因此值得发表。在


Tags: 数据self信息truenewifisrequest
1条回答
网友
1楼 · 发布于 2024-05-20 19:34:44

有趣。快速测试显示del item行上有一个键错误,而不是您所说的可能发生的地方。 显然,您必须先检查密钥是否存在,然后才能删除它:

def my_session_thing(invalidate=False):
    if invalidate and 'my_session_dict' in self.request.session:

至于为什么这是必要的,而不应该这样做,我不知道(我闻到了地产恶作剧)。似乎会话在调用__del__pop时没有加载其存储。在

相关问题 更多 >