django会议检查是否存在

don*_*yor 2 python django session

我想检查会话中是否有任何内容.我做的是:

if request.session: 
   # do something
Run Code Online (Sandbox Code Playgroud)

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

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

感谢帮助.

fre*_*ish 6

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

原因是Django在你打电话之前不加载会话request.session[key].它被懒惰地实例化了.

所以你可以尝试这样做:

if request.session._session:
    # do something
Run Code Online (Sandbox Code Playgroud)

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

if request.session.keys():
    # do something
Run Code Online (Sandbox Code Playgroud)

注意如何.keys()工作:

Django的/的contrib /会话/后端/ base.py

class SessionBase(object):
    # some code

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

    # some code
Run Code Online (Sandbox Code Playgroud)

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