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()方法?
感谢您的指导。
答案 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。