diff --git a/apps/common/fields/model.py b/apps/common/fields/model.py index bc5c5538d..945a98ea4 100644 --- a/apps/common/fields/model.py +++ b/apps/common/fields/model.py @@ -112,21 +112,29 @@ class EncryptMixin: """ EncryptMixin要放在最前面 """ + + def decrypt_from_signer(self, value): + return signer.unsign(value) or '' + + def decrypt_from_aes(self, value): + try: + return aes_crypto.decrypt(value) + except (TypeError, ValueError): + pass + def from_db_value(self, value, expression, connection, context): if value is None: return value value = force_text(value) - plain_value = '' # 优先采用 aes 解密 - try: - plain_value = aes_crypto.decrypt(value) - except (TypeError, ValueError): - pass + plain_value = self.decrypt_from_aes(value) # 如果没有解开,使用原来的signer解密 if not plain_value: - plain_value = signer.unsign(value) or '' + plain_value = self.decrypt_from_signer(value) + + # 可能和Json mix,所以要先解密,再json sp = super() if hasattr(sp, 'from_db_value'): plain_value = sp.from_db_value(plain_value, expression, connection, context) @@ -135,6 +143,8 @@ class EncryptMixin: def get_prep_value(self, value): if value is None: return value + + # 先 json 再解密 sp = super() if hasattr(sp, 'get_prep_value'): value = sp.get_prep_value(value)