0
我有一个模型存储用户输入的数据库密码。因为我的应用需要连接到这些数据库。密码在数据库中被加密。但是,当它被检索时,我需要将decrypt
函数应用于密码字段。我在哪里可以这样做,以便仅在查询数据库时才应用,而不是在保存字段时应用。Django ORM - 调整字段值返回
这里是我的模型:
class Databases(models.Model):
"""
Handles the storing of database connections
"""
# Initialize the encryption class
e = Encryption()
# Our unique id for the database
id = models.AutoField(primary_key=True)
# Database name to display to the user
database_display_name = models.CharField(max_length=128, db_index=True, unique=True)
# Database name
database_name = models.CharField(max_length=128, db_index=True)
# Database status
active = models.BooleanField(default=True, db_index=True)
# The host name
host = models.CharField(max_length=256)
# The default port
port = models.IntegerField(default=3306)
# The username for the database
username = models.CharField(max_length=128)
# The password for the database
password = models.CharField(max_length=256)
# Set the database type
database_type = models.CharField(max_length=64, db_index=True, default="mysql")
# Timestamps
created_at = models.DateTimeField(db_index=True)
updated_at = models.DateTimeField(db_index=True)
event_at = models.DateTimeField(db_index=True)
def get_password(self, obj):
print("Retrieving")
return Databases.e.decrypt(obj.password)
def save(self, *args, **kwargs):
"""
On save, update timestamps
"""
# If the record does not currently exist in the database
if not self.id:
self.created_at = timezone.now()
self.updated_at = timezone.now()
# Encrypt the password
self.password = Databases.e.encrypt(self.password)
return super(Databases, self).save(*args, **kwargs)
class Meta:
db_table = 'databases'
这里是我的串行:
class DatabasesSerializer(serializers.ModelSerializer):
class Meta:
model = Databases
我想我可能已经造成了一些困惑:我试图用self.e.decrypt(self.password)覆盖字段密码,以便每当使用密码字段时它会显示自己的结果.e.decrypt(self.password) – user2694306
我建议不要在数据库中存储纯文本密码,如果有人获得未经授权的访问,您的所有数据库都将受到攻击。无论如何,如果你想以纯文本的形式存储它们,为什么还要在首先保存时加密? – rafalmp