【问题标题】:django session check for existancedjango 会话检查是否存在
【发布时间】:2013-02-26 07:15:17
【问题描述】:

我正在尝试检查会话中是否有任何内容。我所做的是:

if request.session: 
   # do something

但它不起作用。有什么方法可以知道会话在那一刻是否包含某些内容?

如果我使用request.session['some_name'],它会起作用,但在某些情况下,我只需要知道会话是否为空。

询问一些具体的名字并不总是需要的。 例如。如果没有会话,则返回错误,因为some_name 不存在。

【问题讨论】:

  • request.session 是 dict,因此您可以尝试 if len(request.session.keys()) > 0 来检查存在的任何项目。
  • @Rohan request.session 不是字典。它是 SessionBase 对象的一个​​实例,其行为类似于 dict。

标签: python django session


【解决方案1】:

request.sessionSessionBase 对象的一个​​实例,其行为类似于字典,但它不是字典。该对象有一个名为_session 的“私有”字段(实际上是一个属性),它是一个包含所有数据的字典。

原因是 Django 在您调用 request.session[key] 之前不会加载会话。它是延迟实例化的。

所以你可以尝试这样做:

if request.session._session:
    # do something

或者你可以通过查看这样的键来做到这一点:

if request.session.keys():
    # do something

注意.keys() 的工作原理:

django/contrib/sessions/backends/base.py

class SessionBase(object):
    # some code

    def keys(self):
        return self._session.keys()

    # some code

我总是建议直接阅读源代码。

【讨论】:

  • 正如上面@freakish 提到的,你可以通过request.session._session 在django 中获得一堆会话,它返回一个会话密钥,其值为dict
【解决方案2】:

现在会话对象上有一个方便的方法

request.session.is_empty()

【讨论】:

    猜你喜欢
    • 2011-12-29
    • 2018-04-04
    • 2013-05-22
    • 2011-02-18
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    相关资源
    最近更新 更多