"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()

документация для Подписывающего документация для секретов

Вернуться на верх