如何重载类成员的赋值?

1 投票
2 回答
591 浏览
提问于 2025-04-15 13:51

我正在用Python和Django写一个玩家模型类,遇到了一个小问题,就是关于密码的部分。我希望在给密码赋值的时候,密码能自动进行加密,但我找不到关于重载赋值操作符的相关资料。请问有没有办法让我在给password赋值时,自动执行hashlib.md5(password).hexdigest()这个操作呢?

from django.db import models

class Player(models.Model):
    name = models.CharField(max_length=30,unique=True)
    password = models.CharField(max_length=32)
    email = models.EmailField()

2 个回答

0

你可以使用我为SQLAlchemy创建的HashedProperty类。你可以像这样在Django中使用它:

class Player(models.Model):
    name = models.CharField(max_length=30,unique=True)
    password_hash = models.CharField(max_length=32)
    password_salt = models.CharField(max_length=32)
    password = HashedProperty('password_hash', 'password_salt',
                   hashfunc=salted_hexdigest(hashlib.md5),
                   saltfunc=random_string(32))
    email = models.EmailField()
6

你不能用属性来覆盖这个字段的设置方法吗?

引用自 django 文档

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

    def _get_full_name(self):
        return "%s %s" % (self.first_name, self.last_name)

    def _set_full_name(self, combined_name):
        self.first_name, self.last_name = combined_name.split(' ', 1)

    full_name = property(_get_full_name)

    full_name_2 = property(_get_full_name, _set_full_name)

撰写回答