【问题标题】:Python Django How to Create Hash Fields inside django models.pyPython Django 如何在 django models.py 中创建哈希字段
【发布时间】:2019-01-11 22:27:17
【问题描述】:

我正在开发一个 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)

我想添加三个新的哈希字段,例如 usernamepasswordemail

请帮帮我!

提前致谢!

【问题讨论】:

    标签: python django python-3.x django-models django-model-field


    【解决方案1】:

    您可以使用标准的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)
    

    【讨论】:

    • 一般可以用什么盐?
    • 我是否需要调用make_password() 方法来处理所有需要像emailusername 一样散列的字段?
    • @AbdulRehman 如果您需要对这些字段进行哈希处理,那么可以。至于盐,您实际上不能将其提供给make_password 方法。在这种情况下,Django 会自动生成它。
    • 不错。但是你如何验证呢?
    猜你喜欢
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2015-03-20
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多