Я не уверен, что является лучшим / питоническим способом создания пользовательского документа, который автоматически хеширует свой пароль при создании.
Рассмотрим следующую модель mongoengine:
class User(Document):
email = EmailField(required=True, primary_key=True)
name = StringField(required=True)
pswd = StringField(required=True)
def check_pswd(self, password):
return verify_password(password, self.pswd)
def hash_pswd(self, password):
return hash_password(password):
def save(self, *args, **kwargs):
self.pswd = self.hash_pswd(self.pswd)
super().save(*args, **kwargs)
Когда я создаю пользователя, он отлично работает:
user = User()
user.email = '[email protected]'
user.pswd = 'password'
user.name = 'User'
user.save()
Но если я обновлю его, он удвоит хеш-пароль, я этого не хочу.
#User wants to change his name
user = User.objects(email='[email protected]')
user.name = 'User 2'
user.save()
Есть ли способ хешировать его пароль только при создании или изменении пароля?
Или, может быть, мне следует делегировать ответственность за хеширование пароля представлению / контроллеру?