Python Django 如何在 models.py 中创建哈希字段

5

我正在开发一个Python(3.6) & Django(1.10) 项目,需要保存一些第三方服务的用户凭证,比如用户名、密码和电子邮件地址,我只实现了rest API,所以根本没有form.py文件。 那么,我该如何在models.py文件中创建哈希字段?

这是我当前的models.py

class DeploymentOnUserModel(models.Model):
    deployment_name = models.CharField(max_length=256, )
    credentials = models.TextField(blank=False)
    project_name = models.CharField(max_length=150, blank=False)
    project_id = models.CharField(max_length=150, blank=True)
    cluster_name = models.CharField(max_length=256, blank=False)
    zone_region = models.CharField(max_length=150, blank=False)
    services = models.CharField(max_length=150, choices=services)
    configuration = models.TextField(blank=False)
    routing = models.TextField(blank=True)

    def save(self, **kwargs):
        if not self.id and self.services == 'Multiple' and not self.routing:
            raise ValidationError("You must have to provide routing for multiple services deployment.")
        super().save(**kwargs)

我想添加三个新的哈希字段,如 用户名密码电子邮件

请帮助我!

先感谢您!

1个回答

10
您可以使用标准的CharField。要存储哈希值,请在保存之前使用make_password方法:
from django.contrib.auth.hashers import make_password

password = models.CharField(max_length=256)

def save(self, **kwargs):
    some_salt = 'some_salt' 
    password = make_password(self.password, some_salt)
    if not self.id and self.services == 'Multiple' and not self.routing:
        raise ValidationError("You must have to provide routing for multiple services deployment.")
    super().save(**kwargs)

1
我通常可以使用哪种盐? - Abdul Rehman
我需要为所有需要哈希的字段(如电子邮件和用户名)调用make_password()方法吗? - Abdul Rehman
@AbdulRehman 如果您需要对这些字段进行散列处理,那么是的。至于盐值,您实际上可以不提供它给 make_password 方法。在这种情况下,Django 会自动生成它。 - neverwalkaloner
1
刚刚发现了如何验证 https://docs.djangoproject.com/en/3.0/topics/auth/passwords/#module-django.contrib.auth.hashers - theTypan
1
你可以使用从django.contrib.auth.hashers模块导入的check_password()函数进行验证。如果你在make_password()中没有传递任何盐值,那么你不必在这里使用任何盐值,Django会自动使用它的盐值。 - Sangeeth Joseph
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接