#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. пожалуйста, не могли бы вы привести небольшой пример, как я могу фильтровать эти данные? это было бы большой услугой.