[英]Django non persistent model field
我有一個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
。 或者,還有更好的方法?
要按原樣回答您的問題,可以在設置密碼之前先獲取對密碼的引用:
self.temp_pw = user.generate_password()
user.set_password(self.temp_pw)
然后您可以以self.temp_pw的身份訪問密碼,但這將是一個易失性屬性,而不是保存到數據庫的屬性。
但是,我強烈建議您不要這樣做,尤其是反對通過電子郵件發送密碼。 最好提供一個密碼重置功能IMO。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.