我有一个Django模型,我为用户创建一个随机密码。
Manager.py:
class UserManager(BaseUserManager):
def create_user(self, password=None):
user = self.model()
if password:
user.set_password(password)
else:
user.set_password(user.generate_password())
user.save()
return user
然后我想在保存模型后用临时密码向用户发送电子邮件。
@receiver(post_save, sender=User)
def registration_email(sender, instance, created, **kwargs):
if created:
pass
我的问题是密码是经过哈希处理的(这很好),因此我无法在post_save
函数中执行以下操作... instance.password
。那么有没有一种方法可以让非持久性模型字段进行读取(仅在第一次保存时),即instance.tempcleartext
。或者有更好的方法吗?
答案 0 :(得分:1)
要按原样回答您的问题,您可以在设置密码之前获取密码参考:
self.temp_pw = user.generate_password()
user.set_password(self.temp_pw)
然后您可以将密码作为self.temp_pw访问,但它将是一个易失性属性,而不是保存到数据库的属性。
但是,我强烈建议不要这样做,特别是不要通过电子邮件发送密码。提供密码重置功能,IMO要好得多。