django会议检查是否存在

时间:2013-03-11 07:11:19

标签: python django session

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

if request.session: 
   # do something

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

如果我request.session['some_name'],它可以工作,但在某些情况下我只需要知道会话是否为空。询问一些特定的名字并不总是想要的东西。例如。如果没有会话,则返回错误,因为some_name不存在。

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

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

原因是Django在你致电request.session[key]之前没有加载会话。这是懒惰的实例化。

所以你可以尝试这样做:

if request.session._session:
    # do something

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

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

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

<强> django的/了contrib /会话/后端/ base.py

class SessionBase(object):
    # some code

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

    # some code

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

答案 1 :(得分:0)

如今,会话对象上有一种便捷方法

request.session.is_empty()