2010-10-21 31 views
12

Tôi đang cố triển khai trường char được mã hóa.Trường tùy chỉnh của to_python không hoạt động? - Django


Tôi đang sử dụng để mã hóa pydes

Đây là những gì tôi có:

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)) 

Các lĩnh vực được lưu mã hóa trong cơ sở dữ liệu thành công

nhưng khi retireved nó không in ra phiên bản đã giải mã


Bất kỳ ý tưởng nào?

Trả lời

16

Bạn đã quên để thiết lập các metaclass:

class BaseEncryptedField(models.CharField): 

    __metaclass__ = models.SubfieldBase 

    ... etc ... 

Như the documentation explains, to_python chỉ gọi khi metaclass SubfieldBase được sử dụng.

+2

wow! Cám ơn rất nhiều! Tôi rất hạnh phúc :) – RadiantHex

+1

Tôi nghĩ câu trả lời này đã lỗi thời cho các phiên bản gần đây của Django. –

Các vấn đề liên quan