无法检查已经存在的用户名 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":-),您的其余逻辑将变得准确。
这是我用来检查现有用户名的代码:
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":-),您的其余逻辑将变得准确。