1

我正在用 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()
4

2 回答 2

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)
于 2009-08-25T09:06:33.433 回答
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()
于 2009-08-25T09:06:37.350 回答