2

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

if request.session: 
   # do something

但它不工作。有没有办法知道会话在那一刻是否包含某些内容?

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

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

4

2 回答 2

7

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

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

于 2013-03-11T07:36:34.243 回答
1

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

request.session.is_empty()

于 2018-09-20T07:57:18.043 回答