我正在使用Django在Python中编写一个Player模型类,我遇到了一个密码成员的小问题。我希望密码在分配时自动进行哈希处理,但我找不到任何关于重载赋值运算符或任何内容的信息。有没有什么方法可以重载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()
答案 0 :(得分:6)
你不能使用属性并覆盖字段的setter吗?
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)
答案 1 :(得分: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()