class AESTextField(models.CharField):
def value_to_string(self, obj):
"""序列化"""
value = self.value_from_object(obj)
return self.get_prep_value(value)
def to_python(self, value):
if value is not None:
try:
value = AES.new('key').decrypt(value)
except Exception as e:
logger.exception(f'密码解密失败:{e}')
return value
def from_db_value(self, value, expression, connection):
"""从数据库取出来的值"""
if value is not None:
try:
value = AES.new('key').decrypt(value)
except Exception as e:
logger.exception(f'密码解密失败:{e}')
return value
def get_prep_value(self, value):
if value is not None:
try:
value = AES.new('key').encrypt(value)
except Exception as e:
logger.exception(f'密码加密失败:{e}')
return value
def value_from_object(self, obj):
return super().value_from_object(obj)
def get_db_prep_value(self, value, connection, prepared=False):
return super().get_db_prep_value(value, connection, prepared)
def get_db_prep_save(self, value, connection):
return super().get_db_prep_save(value, connection)