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是一个查询对象,您的比较总是正确的。您需要使用 get、fetch 等执行查询。然后查看结果集是否有内容。

你应该做类似的事情

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

或者您可以执行 fetch(10),并检查非空列表。当然,如果您发现超过 1 个项目匹配,那么这将表明您的系统中存在更广泛的错误。

于 2013-04-07T15:35:34.363 回答