簡體   English   中英

Django非持久模型字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM