Ceci est mon modèle pour les utilisateurs stockage:Comment mettre à jour datastore GAE
class User(db.Model):
username = db.StringProperty(required = True)
password = db.TextProperty(required = True)
email = db.TextProperty(required = True)
Supposons cet utilisateur signup, et je mis là des données dans datastore
u = Post(username = joey, password = encrypt(password), [email protected])
u.put()
u = Post(username = chandler, password = encrypt(password), [email protected])
u.put()
u = Post(username = ross, password = encrypt(password), [email protected])
u.put()
Si l'utilisateur clique Mot de passe ou changer le mot de passe. Comment puis-je récupérer l'enregistrement avec un nom d'utilisateur ou un e-mail comme clé et mettre à jour un nouveau mot de passe chiffré?
J'ai essayé les éléments suivants:
u = User.all().filter('username=', 'joey').fetch(10)
for r in u: #assuming I get only one record.
r.password = encrypt(password)
r.put()
sous une nouvelle autre enregistrement dans le magasin de données. Maintenant, j'ai deux enregistrements de joey.
Également essayé, en utilisant GqlQuery récupérer l'enregistrement de l'utilisateur et essayer de mettre à jour l'enregistrement. Il lance erreur que "Liste n'a pas mis() méthode définie"
S'il vous plaît ne pas me lier à la documentation, il me donne mal à la tête. TL; DR: comment mettre à jour la banque de données dans GAE en utilisant des données définies par l'utilisateur comme clé.
EDIT: code de correction typo.
Remplacez 'wu' par' u'. Excepté le fait que vous créez 3 entités 'Post' (et aucune entité' User'), et n'enregistrez que l'une d'entre elles dans l'installation, c'est exactement ce que vous faites. Bien que '.get()' soit meilleur qu'utiliser '.fetch (10)' et itérer à travers ce que vous espérez est une liste d'un résultat. Eh bien, et le fait que votre code ne fonctionnera pas du tout parce que vous passez des chaînes non-cotées. – geoffspear
Le code est un peu faux parce que j'ai manqué quelques étapes tout en convertissant mon exemple à plus générique. Le principal problème pour moi est que j'ai besoin de code pour UPDATE. – hashg
Si vous récupérez une entité et que vous appelez sa méthode '.put()', vous la mettrez à jour, à moins que vous n'agitiez avec la clé. – geoffspear