一、场景
我们在使用admin后台管理用户的时候需要对用户信息进行一个特殊处理,如加密用户的密码。这个时候我们就需要定义一个方法完成数据字段的加密。
二、方法
我们在model中重载save的方法,来对密码字段进行加密处理
代码:
class User(models.Model):
userid = models.AutoField(db_column='userId', primary_key=True, verbose_name="用户ID") # Field name made lowercase.
username = models.CharField(db_column='userName', max_length=255, blank=True, null=True, verbose_name="用户名") # Field name made lowercase.
password = models.CharField(max_length=255, blank=True, null=True)
gender = models.IntegerField(blank=True, null=True, verbose_name="性别", choices=((1, '男'), (0, '女')))
mail = models.CharField(max_length=45, blank=True, null=True, verbose_name="邮件")
picurl = models.CharField(db_column='picUrl', max_length=255, blank=True, null=True, default="xxx.png") # Field name made lowercase.
# 重新方法完成数据字段加密
# 引入hashlib的包
def save(self, *args, **kwargs):
md5 = hashlib.md5()
# 加密的字段
md5.update(self.password.encode())
self.password = md5.hexdigest()
super(User, self).save(*args, **kwargs)
class Meta:
# managed = False
verbose_name = "用户管理表"
verbose_name_plural = verbose_name
db_table = 'user'
结果
三、总结
通过上面的方法就可以实现数据字段的加密,值得注意的是,由于现实的字段是加密之后的字段,如果在没有修改的情况下继续点击保存就会对加密的数据在加密,因此查看完数据之后不能直接点保存。
参考: