0

私は仕事をしようとしている小さなサインアップページを持っています。基本的に、ユーザー名、パスワード、電子メールを入力します。入力したユーザー名がまだ存在しない場合は、「ようこそ (ユーザー名はこちら)!」というウェルカム ページにリダイレクトされます。ユーザーが存在する場合は、サインアップ ページを再レンダリングします。問題は、ユーザーが存在しない場合でも、サインアップ ページを再レンダリングし続けることです。エラーは発生しません。ユーザーが存在するかどうかをチェックする関数「getByName」は、true を返し続けます。誰でも問題を見ることができますか?

「getByName」関数を呼び出すコードは次のとおりです。

    if(username and password and verify and email):
        if UserInfo.getByName(username) == True:
            self.renderSignup()
        else:
            UserInfo.register(username, password, email)
            cookieVal = str(encrypt.makeCookieHash(username))
            self.response.headers.add_header("Set-Cookie", "username=%s; Path=/" % (cookieVal))
            self.redirect("/welcome")
    else:
        self.renderSignup(username, email, usernameError, passwordError, verifyError, emailError)

「getByName」関数を含む「UserInfo」データ モデルと他の関数を次に示します。

class UserInfo(db.Model):
    passwordHash = db.StringProperty(required = True)
    email = db.StringProperty(required = True)
    username = db.StringProperty(required = True)

@classmethod 
def register(cls, name, password, email):
    encrypt = Encrypt()
    pwHash = encrypt.hashUserInfo(name, password)
    UserInfo(passwordHash = pwHash, email = email, username = name).put()

@classmethod
def getByName(cls,name):
    usersWithName = UserInfo.gql("where username = :1", name)
    if usersWithName != None:
        return True
    return False
4

1 に答える 1

2

台詞

usersWithName = UserInfo.gql("where username = :1", name)
if usersWithName != None:

比較を行う場所は、間違っている場所です。userWithNameはクエリ オブジェクトであり、比較は常に true になります。get、fetch などを使用してクエリを実行し、結果セットにコンテンツがあるかどうかを確認する必要があります。

あなたは次のようなことをしているはずです

usersWithName = UserInfo.gql("where username = :1", name).get()
if usersWithName != None:

または、fetch(10) を実行して、空でないリストをチェックすることもできます。もちろん、一致するアイテムが複数見つかった場合は、システムに広範なエラーがあることを示しています。

于 2013-04-07T15:35:34.363 に答える