Как это работает, если условно работает в Python? - PullRequest
0 голосов
/ 15 января 2011
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 ()?

Спасибо за руководство.

Ответы [ 4 ]

8 голосов
/ 15 января 2011

Это будет в основном проверять, является ли user фактическим объектом или None. Если это None, код перейдет в блок else и перенаправит на страницу «создать логин».

3 голосов
/ 15 января 2011

Я подозреваю, что users.get_current_user() возвращает объект или None, если текущего пользователя нет. Python интерпретирует None как False в условном выражении.

Обратите внимание, что тестирование на 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 голосов
/ 15 января 2011

users.get_current_user() возвращает объект пользователя или None, если пользователь не вошел в систему. В python можно проверить, имеет ли значение переменной None, например:

a = None
if not a:
  print "a values is None"
1 голос
/ 15 января 2011

Возвращает объект пользователя, который может быть None, если нет текущего пользователя.Ни один из них не похож на Python-эквивалент NULL, и в условном выражении он оценивается как ложный.

...