以下是检查现有用户名的代码:
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>
答案 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; :-),其余逻辑变得准确