无法检查已存在的用户名谷歌应用引擎

时间:2015-02-10 14:32:02

标签: python google-app-engine registration google-cloud-datastore user-registration

以下是检查现有用户名的代码:

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>

1 个答案:

答案 0 :(得分:2)

我将支票更改为:

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

现在,if usernames:后卫会产生你想要的效果。

原因很简单:在您的代码中,您构建了一个查询对象,您调用usernames,但实际上您从未运行该查询 - 您检查对象的真实性,碰巧(几乎所有Python对象除了空容器和字符串,无,零数字),但没有任何意义。

在这里,我以最简单的方式运行查询 - 只计算它将返回多少项(只计算比实际获取它们快一点:-)并且具有非常低的限制(因为我们只关心计数为0,这是正确的,1表示重复)。

现在usernames是一个数字,用于计算用户名在数据存储区中出现的次数(1代表&#34;一次或多次&#34; :-),其余逻辑变得准确