我正在使用Google App Engine Python联合登录,它使用OpenID让用户使用现有帐户登录。我希望将用户定向到一个页面,在页面中填写一些关于它们的额外信息,例如用户名和简短的生物。现在登录后,用户被定向到这个处理程序,如果他们有用户名,我希望他们留在这个页面上,否则我希望他们重定向到/ profile
class Tester(BlogHandler):
def get(self):
global visits
logout = users.create_logout_url(self.request.uri)
user = users.get_current_user()
if user:
currentregistereduser = None
try:
user_db_qry = User.query(User.theid == user.federated_identity())
user_db_list = user_db_qry.fetch(1)
#this is the line that is causing the error
currentregistereduser = user_db_list[0]
except IndexError:
#I could do something here to fix it but I am not sure what
if currentregistereduser:
if not currentregistereduser.username:
self.redirect("/profile")
else:
self.render("tester.html", user=user, logout=logout)
问题是当我尝试在新用户上执行currentregistereduser = user_db_list [0]时我得到一个IndexError但它在现有用户上工作正常。有谁知道是什么原因引起的?我必须在我的/个人资料页面上做相同的事情来识别用户,所以我没有太多帮助,只是将它们重定向到那里。
答案 0 :(得分:1)
发生这种情况的原因是因为您对数据存储区的查询是空的(在您的情况下,对于新用户,这是预期的)。解决这个问题的一种方法是检查列表是否存在,如果存在,则处理:
class Tester(BlogHandler):
def get(self):
global visits
logout = users.create_logout_url(self.request.uri)
user = users.get_current_user()
if user:
currentregistereduser = None
user_db_qry = User.query(User.theid == user.federated_identity())
user_db_list = user_db_qry.fetch(1)
# Check to see if the query returned anything at all - if so, assign
# the value to currentregistereduser; it not, it will remain None
if user_db_list:
currentregistereduser = user_db_list[0]
if currentregistereduser:
if not currentregistereduser.username:
self.redirect("/profile")
else:
self.render("tester.html", user=user, logout=logout)
# Assuming the code continues here...