0

OpenIDを使用してユーザーが既存のアカウントでログインできるようにするGoogleAppEngineのPythonフェデレーションログインを使用しています。ユーザー名や短い略歴など、ユーザーに関する追加情報を入力するページにユーザーを誘導してほしい。ログイン後、ユーザーはこのハンドラーに移動します。ユーザー名がある場合はこのページにとどまり、それ以外の場合は/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

これが発生する理由は、データストアへのクエリが空に戻ってくるためです (これは、新しいユーザーの場合に予想されます)。これを回避する 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 に答える