2010-10-21 6 views
12

J'essaye d'implémenter un champ char chiffré.To_python de champ personnalisé ne fonctionne pas? - Django


J'utilise pydes pour le cryptage

C'est ce que j'ai:

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

Le champ est sauvegardée crypté dans la base de données avec succès

mais quand retireved il n'imprime pas la version décryptée


Des idées?

Répondre

16

Vous avez oublié de régler la métaclasse:

class BaseEncryptedField(models.CharField): 

    __metaclass__ = models.SubfieldBase 

    ... etc ... 

Comme the documentation explains, to_python est seulement appelé lorsque la métaclasse SubfieldBase est utilisé.

+2

wow! Merci beaucoup! Je suis tellement heureux :) – RadiantHex

+1

Je pense que cette réponse est maintenant périmée pour les versions récentes de Django. –

Questions connexes