这是我存储用户的模型:
class User(db.Model):
username = db.StringProperty(required = True)
password = db.TextProperty(required = True)
email = db.TextProperty(required = True)
假设此用户注册,我将数据放入数据存储区
u = Post(username = joey, password = encrypt(password), email=joey@friends.com)
u.put()
u = Post(username = chandler, password = encrypt(password), email=chandler@friends.com)
u.put()
u = Post(username = ross, password = encrypt(password), email=ross@friends.com)
u.put()
如果用户点击忘记密码或更改密码。如何使用用户名或电子邮件作为密钥获取记录并更新新的加密密码?
我尝试了以下内容:
u = User.all().filter('username=', 'joey').fetch(10)
for r in u: #assuming I get only one record.
r.password = encrypt(password)
r.put()
这是另一条进入数据存储区的记录。现在我有两个 joey 的记录。
还试过,使用GqlQuery获取用户记录并尝试更新记录。它抛出错误,“List没有定义put()方法”
请不要将我链接到文档,这让我很头疼。
TL; DR:如何使用用户定义的数据作为密钥更新GAE中的数据存储区。
编辑:修复代码拼写错误。
答案 0 :(得分:0)
你得到错误的原因" List没有定义put()方法"是因为GqlQuery返回一个列表。您还应该确保用户名是唯一的。请尝试以下:
users = db.GqlQuery("select * from User where username=:1", username).fetch(1)
if len(users) == 0:
err = "not user with name " + username
else:
user = users[0]
# change password for user
...