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の 2 つのレコードができました。

また、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 に答える