在 django 模型中加密 DateField?

Posted

技术标签:

【中文标题】在 django 模型中加密 DateField?【英文标题】:Encrypt DateField in django models? 【发布时间】:2012-02-05 23:23:33 【问题描述】:

我有一个要求,我必须加密表中的某些字段。 我正在使用 Django 1.3.1 和 postgres 9.1。我指的是这个应用程序 django-fields :-

https://github.com/svetlyak40wt/django-fields/blob/master/src/django_fields/fields.py

这是我的代码:-

patient_type = EncryptedCharField(max_length=80, choices=CHOICES.PATIENT_TYPES)
date_of_birth = EncryptedDateField(null=True, blank=True)
gender = EncryptedCharField(max_length=1024, choices=CHOICES.GENDERS, blank=True)
contact_phone = EncryptedCharField(max_length=1024, blank=True)
security_question = models.ForeignKey(SecurityQuestion, null=True, blank=True)
security_answer = EncryptedCharField(max_length=1024, null=True, blank=True)

它将除 date_of_birth 之外的所有内容都以加密形式存储在数据库中。它会引发此错误

追溯: get_response 中的文件“/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py” 111. 响应 = 回调(请求,*callback_args,**callback_kwargs) _dec 中的文件“/home/user/slave/old_careprep/CPMS-Source/careprep/../careprep/utilities/decorators.py” 14. return view_func(request, *args, **kwargs) 设置中的文件“/home/user/slave/old_careprep/CPMS-Source/careprep/../careprep/visit/views.py” 202. 患者.save() 保存文件“/usr/local/lib/python2.7/dist-packages/django/db/models/base.py” 460. self.save_base(使用=使用,force_insert=force_insert,force_update=force_update) save_base 中的文件“/usr/local/lib/python2.7/dist-packages/django/db/models/base.py” 553. 结果 = manager._insert(值,return_id=update_pk,使用=使用) _insert 中的文件“/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py” 195. 返回插入查询(self.model,值,**kwargs) insert_query 中的文件“/usr/local/lib/python2.7/dist-packages/django/db/models/query.py” 1436. return query.get_compiler(using=using).execute_sql(return_id) execute_sql 中的文件“/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py” 791. cursor = super(SQLInsertCompiler, self).execute_sql(None) execute_sql 中的文件“/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py” 735. cursor.execute(sql,参数) 执行中的文件“/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py” 34. return self.cursor.execute(sql, params) 执行中的文件“/usr/local/lib/python2.7/dist-packages/django/db/backends/postgresql_psycopg2/base.py” 44. return self.cursor.execute(query, args)

异常类型:DatabaseError at /visit/setup/ 异常值:日期类型的输入语法无效:“$AES$55403376ed906e119b0f7779554fbb51” 第 1 行:...L, NULL, '$AES$0452edae035cc33c4084e7b0fb39edd7', '$AES$5540... ^ 我们将不胜感激。

谢谢

【问题讨论】:

【参考方案1】:

我意识到如果我将 DateField 转换为 CharField 然后应用 EncryptedCharField 它解决了我的问题

【讨论】:

以上是关于在 django 模型中加密 DateField?的主要内容,如果未能解决你的问题,请参考以下文章

Django 模型 DateField to_python

DateField 的 Django 模型过滤器不起作用

为啥 DateField 数据类型在模型方法和视图中不同?

如何在 Django DateField 中仅保留日期部分

Django 2.0 ModelForm dateField 不显示为小部件

Django rest框架DateField格式