0

这是我存储用户的模型:

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 获取用户记录并尝试更新记录。它抛出“列表没有定义 put() 方法”的错误

请不要将我链接到文档,这让我很头疼。

TL;DR:如何使用用户定义的数据作为键来更新 GAE 中的数据存储。

编辑:修复代码错字。

4

1 回答 1

0

您收到错误“列表没有定义 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
        ...
于 2012-06-01T18:58:39.187 回答