Данные не сохраняются как зашифрованные данные django

#django #encryption #django-models

#django #шифрование #django-rest-framework

Вопрос:

до сих пор я пробовал более 6 плагинов и теперь разочаровываюсь. Теперь, используя эту криптографию

все в порядке и сделано соответствующим образом, но когда я сохраняю данные в диспетчере моделей следующим образом

  def create_user(self, email, password, **extra_fields):
        user = self.model(email=email, **extra_fields)
        user.test_field = 'new.user@oc.com'
        user.save(using=self._db)
        return user
  

это сохранение данных, обычно не зашифрованных

Моя модель похожа

 class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=255, unique=True)
    name = models.CharField(max_length=255)
    test_field = encrypt(models.CharField(max_length=100))
    objects = UserManager()
  

Комментарии:

1. Откуда вы знаете, что данные не зашифрованы? django-криптография шифруйте данные без видимых проблем, вы уверены, что проверяете данные непосредственно в своей СУБД, а не через Django?

2. Я проверяю данные в панели django-admin и показываю те же статические данные @Blusky

3. Это нормально. Администратор Django отобразит расшифрованный контент из СУБД.

4. @Blusky хорошо понял мою ошибку. 🙁 все плагины работали нормально. Теперь, если я хочу, чтобы эти данные были в моем Интернете, чтобы они автоматически отображались в удобочитаемой форме?

5. Да, вы не можете запрашивать зашифрованное поле, это один недостаток. Поля расшифровываются по мере того, как ORM обрабатывает данные СУБД, а не в SQL-запросе.

Ответ №1:

Похоже, вы делаете все, как ожидалось.

Данные должны быть зашифрованы на стороне базы данных.

Однако обычно данные отображаются в виде открытого текста на стороне Django, потому что ORM расшифровывает их без проблем.

Если вы проверяете данные непосредственно в базе данных (используя необработанный SQL-запрос без ORM), вы должны увидеть зашифрованные данные.

Если вам нужно отфильтровать зашифрованные данные, вы должны сделать это на python, после расшифровки ORM :

Вместо того, чтобы делать User.objects.filter(test_field__contains="somedata") , вам нужно будет делать [user for user in User.objects.all() if "somedata" in user.test_field] . (Большим) недостатком этого метода является то, что вам нужно будет передать все строки в ORM (и механизм дешифрования)

Комментарии:

1. пожалуйста, не могли бы вы привести небольшой пример, как я могу фильтровать эти данные? это было бы большой услугой.