"FIELD_ENCRYPTION_KEY must be defined in settings" - encrypted_model_fields 错误

"FIELD_ENCRYPTION_KEY must be defined in settings" - encrypted_model_fields error

我正在使用 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()

Signer 的文档 secrets

的文档