如何在自定义模型中使用Django的PASSWORD_HASHERS?

时间:2016-04-26 14:16:01

标签: django django-models django-authentication

我正在为我的项目创建身份验证模型,我想在我的模型中使用Django的PASSWORD_HASHERS作为密码字段,你能建议我正确的方法吗?

我的model.py文件

class vendor_registration(models.Model):
    first_name  = models.CharField(max_length=255,null=True)
    last_name = models.CharField(max_length=255,null=True)
    email_id = models.EmailField(max_length=70,blank=False)
    password = models.CharField(max_length=255,null=True)
    created_on = models.DateTimeField(blank=True,null=True)

我知道如何将它用于User模型,但需要自定义用户模型的解决方案。谢谢

1 个答案:

答案 0 :(得分:0)

虽然您应该为自定义用户创建AbstractBaseUser的子类,但如果您真的想要没有它,那么这就是如何实现它。

您可以在保存方法中使用make_password功能:

from django.contrib.auth.hashers import make_password

class vendor_registration(models.Model):
        first_name  = models.CharField(max_length=255,null=True)
        last_name = models.CharField(max_length=255,null=True)
        email_id = models.EmailField(max_length=70,blank=False)
        password = models.CharField(max_length=255,null=True)
        created_on = models.DateTimeField(blank=True,null=True)

    def save(self, *args, **kwargs):
        if not self.pk:
                self.password = make_password(self.password)
        super(vendor_registration, self).save(*args, **kwargs)

这只会在创建用户时对密码进行哈希处理,您还应该在用户更新时进行考虑。