2010-10-21 13 views
12

Sto provando ad implementare un campo char criptato.to_python del campo personalizzato non funziona? - Django


sto usando pydes per la crittografia

Questo è quello che ho:

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

Il campo viene salvato nel database crittografato con successo

ma quando retireved non stampa la versione decrittata


Qualche idea?

risposta

16

hai dimenticato di impostare la metaclasse:

class BaseEncryptedField(models.CharField): 

    __metaclass__ = models.SubfieldBase 

    ... etc ... 

Come the documentation explains, to_python viene chiamato solo quando viene utilizzata la metaclasse SubfieldBase.

+2

Eeeek !!! Grazie mille! Sono così felice :) – RadiantHex

+1

Penso che questa risposta sia ormai obsoleta per le versioni recenti di Django. –

Problemi correlati