我正在尝试检查会话中是否有任何内容。我所做的是:
if request.session:
# do something
但它不工作。有没有办法知道会话在那一刻是否包含某些内容?
如果我这样做request.session['some_name']
,它会起作用,但在某些情况下,我只需要知道会话是否为空。
询问一些具体的名字并不总是需要的。例如。如果没有会话,则返回错误,因为some_name
不存在。
request.session
是SessionBase
对象的实例,其行为类似于字典,但它不是字典。这个对象有一个叫做“私有”字段(实际上是一个属性)_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
我总是建议直接阅读源代码。
现在会话对象上有一个方便的方法
request.session.is_empty()