2013-03-11 116 views
1

我想檢查會話是否有任何內容。我做的是:django會話檢查存在

if request.session: 
    # do something 

但它不工作。有什麼方法可以知道會話是否包含某些內容?

如果我做request.session['some_name'],它的工作原理,但在某些情況下,我只需要知道會話是否爲空。問一些具體的名字並不總是想要的東西。例如。如果沒有會話,則返回錯誤,因爲some_name不存在。

感謝您的幫助。

+1

'request.session'是字典,所以你可以嘗試'如果len(request.session.keys())> 0'來檢查任何存在的項目。 – Rohan 2013-03-11 07:20:37

+1

@Rohan'request.session'不是字典。它是一個'SessionBase'對象的實例,其行爲像字典。 – freakish 2013-03-11 07:31:49

回答

5

request.sessionSessionBase對象的一個​​實例,它的行爲類似於字典,但它不是字典。這個對象有一個名爲_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 

我總是建議直接閱讀源代碼。

+0

正如上面的@freakish所提到的,只需通過執行'request.session._session',就可以在django中獲得一堆會話,它將返回一個會話密鑰,其值爲'dict' – 2015-04-08 10:06:36