这是如何在Python中有条件的工作?

时间:2011-01-15 03:40:41

标签: python conditional

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 个答案:

答案 0 :(得分:8)

它基本上会检查user是实际对象还是None。如果是None,则代码将进入else块并重定向到“创建登录”页面。

答案 1 :(得分:3)

我怀疑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 :(得分:2)

users.get_current_user()返回用户'对象,如果用户未登录则返回None。可以在python中检查变量值是否为None,如下所示:

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

答案 3 :(得分:1)

它返回一个用户对象,如果没有当前用户,则该对象可以为None。 None有点像python等价的NULL,并且在条件中计算为false。