0

我正在使用 Google App Engine Python Federated Login,它使用 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,但它在现有用户上运行良好。有谁知道这可能是什么原因造成的?我必须在我的 /profile 页面上做同样的事情来识别用户,所以我只是将它们重定向到那里并没有多大帮助。

4

1 回答 1

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...
于 2012-10-17T19:04:00.800 回答