2011-01-15 4 views
0

나는이 라인이 어떻게 작동하는지 이해하지 어떻게합니까? 조건부로 파이썬에서 작동합니까?

from google.appengine.api import users 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp.util import run_wsgi_app 

class MainPage(webapp.RequestHandler): 
    def get(self): 
     user = users.get_current_user() 

     if user: 
      self.response.headers['Content-Type'] = 'text/plain' 
      self.response.out.write('Hello, ' + user.nickname()) 
     else: 
      self.redirect(users.create_login_url(self.request.uri)) 

application = webapp.WSGIApplication(
            [('/', MainPage)], 
            debug=True) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 
:

if user: 
     self.response.headers['Content-Type'] = 'text/plain' 
     self.response.out.write('Hello, ' + user.nickname()) 
    else: 
     self.redirect(users.create_login_url(self.request.uri)) 

내가 users.get_current_user() 부울을 반환 같은데요? 그렇다면 어떻게 그것이 .nickname() 메소드를 얻을 수 있는지?

감사합니다.

+2

유형 강제 변환은 PHP, JavaScript 및 기타와 동일합니다. – BoltClock

답변

8

기본적으로 user이 실제 대상인지 또는 None인지 확인합니다. None 인 경우 코드는 else 블록으로 이동하여 '로그인 생성'페이지로 리디렉션됩니다.

+0

내 C# -lingo에 대한 죄송하지만 "Null"과 같은 없음입니다. 그래서 그것은 사용자 변수가 null인지 검사하고 있습니까? 하지만 그렇다면 왜 해당 분기에 들어가서 null 인 경우 메서드에 액세스 할 수 있습니까? –

+0

실제로'None'은 다른 언어에서'null'과 같은 파이썬입니다. –

+1

'None'은 파이썬에서 거짓 값으로 간주됩니다. 따라서 *'user'가'None'이면'else :'브랜치가됩니다. – Amber

3

현재 사용자가없는 경우 users.get_current_user()이 개체를 반환하는 것으로 의심되거나 None입니다. 조건문에 파이썬은 NoneFalse으로 해석합니다.

그러나 이런 식으로 None을 테스트하는 것은 나쁜 습관입니다. 빈 목록 []과 같은 다른 것들도 False로 평가됩니다. 대신, 코드는 다음과 같이 수정해야합니다

if user is not None: 
     self.response.headers['Content-Type'] = 'text/plain' 
     self.response.out.write('Hello, ' + user.nickname()) 
    else: 
     self.redirect(users.create_login_url(self.request.uri)) 
2

users.get_current_user() 반환 사용자 개체 또는 없음을 사용자가 로그인하지 않은 경우 변수 값이 같은 아무도없는 경우 파이썬에서 확인할 수 있습니다 :.

a = None 
if not a: 
    print "a values is None" 
1

현재 사용자가 없으면 없음을 나타내는 사용자 개체를 반환합니다. None은 Python에 해당하는 NULL과 같으며 조건부에서는 false로 평가됩니다.

관련 문제