2010-10-21 22 views
12

मैं एक एन्क्रिप्टेड चार फ़ील्ड को लागू करने की कोशिश कर रहा हूं।कस्टम फ़ील्ड का to_python काम नहीं कर रहा है? - Django

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

क्षेत्र डेटाबेस सफलतापूर्वक

लेकिन में एन्क्रिप्टेड सहेजा जाता है जब retireved:


मैं एन्क्रिप्शन के लिए pydes उपयोग कर रहा हूँ

यह है कि मैं क्या है यह डिक्रिप्टेड संस्करण

प्रिंट नहीं करता है

कोई विचार?

उत्तर

16

आप metaclass स्थापित करने के लिए भूल गए हैं:

class BaseEncryptedField(models.CharField): 

    __metaclass__ = models.SubfieldBase 

    ... etc ... 

the documentation explains के रूप में, to_python केवल जब SubfieldBase metaclass प्रयोग किया जाता है कहा जाता है।

+2

वाह! बहुत बहुत धन्यवाद! मैं बहुत खुश हूं :) – RadiantHex

+1

मुझे लगता है कि यह उत्तर अब Django के हाल के संस्करणों के लिए पुराना है। –

संबंधित मुद्दे