我正在尝试检查会话中是否包含任何内容。我做的是:
if request.session:
# do something
但它不起作用。有什么方法可以知道会话当时是否包含某些内容?
如果我request.session['some_name']
,它可以工作,但在某些情况下我只需要知道会话是否为空。询问一些特定的名字并不总是想要的东西。例如。如果没有会话,则返回错误,因为some_name
不存在。
感谢您的帮助。
答案 0 :(得分:5)
request.session
是SessionBase
对象的一个实例,其行为类似于字典,但它不是字典。这个对象有一个名为_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()