无法检查已经存在的用户名 google 应用引擎

Unable to check for already existing usernames google app engine

这是我用来检查现有用户名的代码:

def post(self):
        have_error = False
        username = self.request.get('username')
        password = self.request.get('password')
        verify = self.request.get('verify')
        email = self.request.get('email')

        params = dict(username= username,
        email = email)

        usernames = db.GqlQuery(' select *  from Users where username = :1 ', username)


        if not valid_username(username):
            params['username_error'] = "Invalid username"
            have_error = True

        if usernames :
            params['username_error'] = 'Username already exists'
            have_error = True

使用此代码,我的表单会为每个用户名显示 Username already exists

params['username_error'] = 'Username already exists'改为 params['username_error'] = usernames ,

username_error 字段中显示的消息是:

<google.appengine.ext.db.GqlQuery object at 0x10a4e030>

我会将您的支票更改为:

query = db.GqlQuery(' select *  from Users where username = :1 ', username)
usernames = query.count(limit=2)

现在,if usernames:守卫将达到你想要的效果。

原因很简单:在您的代码中,您构建了一个查询对象,您称之为 usernames,但实际上您从未 运行 该查询-- 你检查对象的真实性,它恰好成立(几乎所有 Python 对象都是如此,除了空容器和字符串,None,零数字)但没有任何意义。

在这里,我 运行 以最简单的方式进行查询 - 只计算它会 return 的项目数量(只计算比实际获取它们快一点:-) 并且一个非常低的限制(因为我们只关心 0 的计数,这是正确的,1,这意味着重复)。

现在 usernames 是一个数字,用于计算该用户名在数据存储区中出现的次数(1 代表 "once or more":-),您的其余逻辑将变得准确。