【问题标题】:How do I delete a session key in Django after it is used once?使用一次后如何在 Django 中删除会话密钥?
【发布时间】:2023-03-13 16:32:01
【问题描述】:

我有两种观点。

view1 通过会话密钥将错误消息传递给 view2。

view2 渲染完成后如何删除key?我只需要一次:从 view1 重定向到 view2。刷新我的网页后,我不需要显示该消息。我认为python一旦到达return就不会继续执行@

我正在考虑设置一个过期时间戳,但我需要确保它至少存在 10-20 秒,如果应用程序真的加载这么长时间(我们用 Django 做一些服务器工作)?所以时间不是那么有希望。

谢谢。

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    您可以像任何其他字典一样从会话中删除密钥。

    del request.session['your key']
    

    您可能需要将会话标记为已修改才能保存,具体取决于您的某些设置。

    request.session.modified = True
    

    【讨论】:

    • 对不起。我让整个事情变得如此复杂。我只是将它保存到本地 var,然后就完成了。只需删除它。谢谢。我想太多了。
    • 如果你del是直接关联session的key,而不是像request.session['parent_key']['child']那样嵌套,那么就不需要设置request.session.modified = True
    【解决方案2】:

    您也可以从会话中弹出密钥。您可以将键设置为变量并同时删除它:

    key_variable = request.session.pop('your key')
    

    【讨论】:

    • 也可以取默认值,比如get
    • 这需要request.session.modified = True,还是不需要?
    • @HassanBaig 不,在这种情况下不需要设置request.session.modified = True
    • 此外,在某些情况下,request.session.pop('key',None) 可能会更好
    • 为什么不删除密钥?
    【解决方案3】:
    if "uid" in self.request.session.keys():
        del self.request.session["uid"]
    

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    • 除了@Abhishek 的反馈之外,了解何时以及为什么这种方法可能比八年前接受的答案更受青睐会非常有用。这有什么好处吗?最新版本的 Django 允许吗?
    • 谢谢 ....我把这个作为我的解决方案
    猜你喜欢
    • 2016-12-05
    • 2015-09-01
    • 1970-01-01
    • 2019-10-18
    • 2014-07-08
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多