2013-03-11 2 views
1

세션에 아무 것도 없는지 확인하려고합니다. 내가 한 일은 다음과 같습니다 :django 세션 확인 존재 여부

if request.session: 
    # do something 

그러나 작동하지 않습니다. 세션에 그 순간에 무언가가 포함되어 있는지 알 수있는 방법이 있습니까?

내가 할 경우 request.session['some_name'], 작동하지만 어떤 경우에는 세션이 비어 있는지 여부를 알아야합니다. 특정 이름을 묻는 것이 항상 원하는 것은 아닙니다. 예. 세션이 없으면 some_name이 존재하지 않으므로 오류를 반환합니다.

도움 주셔서 감사합니다.

+1

'request.session'은 dict이므로 존재하는 항목을 확인하기 위해'len (request.session.keys())> 0'을 시도 할 수 있습니다. – Rohan

+1

@Rohan'request.session'은 사전이 아닙니다. 이것은 dict처럼 행동하는'SessionBase' 객체의 인스턴스입니다. – freakish

답변

5

request.sessionSessionBase의 인스턴스이며 사전과 같이 동작하지만 사전이 아닙니다. 이 개체는 모든 데이터를 보유하고있는 사전 인 _session이라는 "개인"필드 (실제로는 속성)입니다.

그 이유는 request.session[key]을 호출하기 전에는 장고가 세션을로드하지 않기 때문입니다. 느슨하게 인스턴스화됩니다.

if request.session._session: 
    # do something 

또는이 같은 키보고 그것을 할 수 있습니다 :

그래서 당신은 그 일을 시도 할 수 있습니다

if request.session.keys(): 
    # do something 

참고 방법 .keys() 작품 :

장고 /있는 contrib /sessions/backends/base.py

class SessionBase(object): 
    # some code 

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

    # some code 

소스 코드를 직접 읽는 것이 좋습니다.

+0

위의 @freakish에서 언급했듯이 django에서'request.session._session'을 수행하면 여러 세션을 얻을 수 있으며, 값이있는 세션 키를'dict' –