自定义字段的to_python不起作用? - Django

Rad*_*Hex 12 python encryption django django-models

我正在尝试实现加密的char字段.


我正在使用pydes进行加密

这就是我所拥有的:

from pyDes import triple_des, PAD_PKCS5
from binascii import unhexlify as unhex
from binascii import hexlify as dohex

class BaseEncryptedField(models.CharField):

    def __init__(self, *args, **kwargs):
        self.td = triple_des(unhex('c35414909168354f77fe89816c6b625bde4fc9ee51529f2f'))
        super(BaseEncryptedField, self).__init__(*args, **kwargs)

    def to_python(self, value):
        return self.td.decrypt(unhex(value), padmode=PAD_PKCS5)

    def get_db_prep_value(self, value):
        return dohex(self.td.encrypt(value, padmode=PAD_PKCS5))
Run Code Online (Sandbox Code Playgroud)

该字段成功加密保存在数据库中

但是当退出时它不会打印出解密版本


有任何想法吗?

Dan*_*man 16

你忘了设置元类:

class BaseEncryptedField(models.CharField):

    __metaclass__ = models.SubfieldBase

    ... etc ...
Run Code Online (Sandbox Code Playgroud)

正如文档所解释的那样,to_python仅在使用SubfieldBase元类时调用.

  • 我认为这个答案现在已经过时了Django的最新版本. (2认同)