我想检查会话是否有任何内容。我做的是:django会话检查存在
if request.session:
# do something
但它不工作。有什么方法可以知道会话是否包含某些内容?
如果我做request.session['some_name']
,它的工作原理,但在某些情况下,我只需要知道会话是否为空。问一些具体的名字并不总是想要的东西。例如。如果没有会话,则返回错误,因为some_name
不存在。
感谢您的帮助。
我想检查会话是否有任何内容。我做的是:django会话检查存在
if request.session:
# do something
但它不工作。有什么方法可以知道会话是否包含某些内容?
如果我做request.session['some_name']
,它的工作原理,但在某些情况下,我只需要知道会话是否为空。问一些具体的名字并不总是想要的东西。例如。如果没有会话,则返回错误,因为some_name
不存在。
感谢您的帮助。
request.session
是SessionBase
对象的一个实例,它的行为类似于字典,但它不是字典。这个对象有一个名为_session
的“private”字段(实际上是一个属性),它是一个保存所有数据的字典。
原因是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
我总是建议直接阅读源代码。
正如上面的@freakish所提到的,只需通过执行'request.session._session',就可以在django中获得一堆会话,它将返回一个会话密钥,其值为'dict' – 2015-04-08 10:06:36
'request.session'是字典,所以你可以尝试'如果len(request.session.keys())> 0'来检查任何存在的项目。 – Rohan 2013-03-11 07:20:37
@Rohan'request.session'不是字典。它是一个'SessionBase'对象的实例,其行为像字典。 – freakish 2013-03-11 07:31:49