"FIELD_ENCRYPTION_KEY must be defined in settings" - encrypted_model_fields 错误
"FIELD_ENCRYPTION_KEY must be defined in settings" - encrypted_model_fields error
- Python 3.8.10
- Django 4.0.2
- django-加密模型字段:0.6.1
我正在使用 encrypted_model_fields 来加密模型字段。我正在加密的字段是用于通过 api.
访问另一个应用程序的用户帐户的密码
根据docs我需要导入模块然后包装模型字段如下:
Models.py
from encrypted_model_fields.fields import EncryptedCharField
account_password = EncryptedCharField(models.CharField(max_length=20, blank=True))
除此之外,我还需要根据文档向 settings.py 添加一个 FIELD_ENCRYPTION_KEY,我已经这样做了。
Settings.py
FIELD_ENCRYPTION_KEY = os.environ.get('FIELD_ENCRYPTION_KEY')
我还在 settings.py 中添加了 'encrypted_model_fields' 到已安装的应用程序,并将加密密钥添加到 .env,它代替了下面的占位符..env:
export FIELD_ENCRYPTION_KEY=my_encryption_key_place_holder
当我 运行 进行迁移时,我收到以下错误:
django.core.exceptions.ImproperlyConfigured: FIELD_ENCRYPTION_KEY must
be defined in settings
我已经定义了,为什么找不到?
问题似乎出在 django 版本 4 - 密码学尚未针对最新版本的 django 进行更新。在尝试使用多个使用密码学的模块加密模型字段的多种解决方案后,我最终决定只使用秘密和签名者。
import secrets
from django.core.signing import Signer
foo = secrets.token_hex(16)
signer = Signer()
value = signer.sign(foo)
queryset = Model.objects.get(pk=foo_pk)
queryset.model_field = foo
queryset.save()
的文档
- Python 3.8.10
- Django 4.0.2
- django-加密模型字段:0.6.1
我正在使用 encrypted_model_fields 来加密模型字段。我正在加密的字段是用于通过 api.
访问另一个应用程序的用户帐户的密码根据docs我需要导入模块然后包装模型字段如下:
Models.py
from encrypted_model_fields.fields import EncryptedCharField
account_password = EncryptedCharField(models.CharField(max_length=20, blank=True))
除此之外,我还需要根据文档向 settings.py 添加一个 FIELD_ENCRYPTION_KEY,我已经这样做了。
Settings.py
FIELD_ENCRYPTION_KEY = os.environ.get('FIELD_ENCRYPTION_KEY')
我还在 settings.py 中添加了 'encrypted_model_fields' 到已安装的应用程序,并将加密密钥添加到 .env,它代替了下面的占位符..env:
export FIELD_ENCRYPTION_KEY=my_encryption_key_place_holder
当我 运行 进行迁移时,我收到以下错误:
django.core.exceptions.ImproperlyConfigured: FIELD_ENCRYPTION_KEY must be defined in settings
我已经定义了,为什么找不到?
问题似乎出在 django 版本 4 - 密码学尚未针对最新版本的 django 进行更新。在尝试使用多个使用密码学的模块加密模型字段的多种解决方案后,我最终决定只使用秘密和签名者。
import secrets
from django.core.signing import Signer
foo = secrets.token_hex(16)
signer = Signer()
value = signer.sign(foo)
queryset = Model.objects.get(pk=foo_pk)
queryset.model_field = foo
queryset.save()
的文档