2016-04-26 31 views
0

我正在为我的项目创建身份验证模型,我想在我的模型中使用Django的PASSWORD_HASHERS作为密码字段,您能否以适当的方式向我建议?如何在自定义模型中使用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) 

我知道如何使用它的用户模式,但需要自定义用户model.Thanks解决方案

+0

请告诉我你不是真的在原始文本中存储密码。您的用户模型应该继承django的基础模型 – Sayse

+0

不要尝试像这样编写自己的身份验证模型。安全的方法是定义[自定义用户模型](https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#substotation-a-custom-user-model)。如果您继承AbstractUser或AbstractBaseUser,则Django将为您处理密码字段。 – Alasdair

回答

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) 

这是创建用户时将只散列密码,你也应该考虑,只要您的用户进行更新。

+0

对不起,我在django的入门级,我应该写这个乐趣,而不是密码= models.CharField(max_length = 255,null =真)它会采取密码字段在查询和创建哈希之前存储在数据库中吗?需要在setting.py中添加password_hasher? –

+0

我已经更新了我的答案,并且无需添加password_hashers – dnit13

+0

如果我在shell中运行查询user_registration_data = vendor_registration.objects.create(first_name ='Piyush',last_name ='Wanare',password ='@ W454rtdQ',email_id = 'nw @ gmail.com',created_at = datetime.datetime.now()),并在数据库中检查,显示与我在输入中给出的密码相同的密码。 –

相关问题