"FIELD_ENCRYPTION_KEY должен быть определен в настройках" - ошибка encrypted_model_fields
- Python 3.8.10
- Django 4.0.2
- django-encrypted-model-fields: 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))
В дополнение к этому мне нужно добавить FIELD_ENCRYPTION_KEY в settings.py, что я и сделал, согласно документации.
Settings.py
FIELD_ENCRYPTION_KEY = os.environ.get('FIELD_ENCRYPTION_KEY')
Я также добавил 'encrypted_model_fields' в установленные приложения в settings.py и ключ шифрования в .env, который находится на месте заполнителя ниже..env:
export FIELD_ENCRYPTION_KEY=my_encryption_key_place_holder
Когда я запускаю makemigrations, я получаю следующую ошибку:
django.core.exceptions.ImproperlyConfigured: FIELD_ENCRYPTION_KEY должен быть быть определен в настройках
Я определил его - так почему он не найден?
Похоже, что проблема связана с django версии 4 - криптография не была обновлена для последней версии django. Попробовав несколько решений для шифрования поля модели с помощью ряда модулей, использующих криптографию, я, наконец, решил просто использовать secrets и Signer вместо этого.
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()
документация для Подписывающего документация для секретов