如何加密 DRF 中的响应?
How to encrypt responses in DRF?
我想加密我的 DRF 项目 API 响应
有没有办法加密大型响应,以便我只能访问前端的数据?
我想加密所有回复。
是的,这是可能的,我已经自己应用了。您可以使用直接应用于序列化器的 AES256(高级加密标准 256)来实现。
基本上加密都是靠django的secret key来加解密。
因此,将有两个函数encrypt()
和decrypt()
,您将在其中申请每个需要加密发送到数据库中的字段。以及在端点命中 GET 请求时解密。
You can get these function example and implementation here.
示例:
from rest_framework import serializers
from django.conf import settings
from aesencryption import AESCipher
aes = AESCipher(settings.SECRET_KEY[:16], 32)
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ['name', 'address']
def create(self, validated_data):
# Here the data will be inserted into the db encrypted.
validated_data['name'] = aes.encrypt(validated_data['name'])
validated_data['address'] = aes.encrypt(validated_data['address'])
return MyModel.objects.create(**validated_data)
def to_representation(self, instance):
# Here you will decrypt the data from the db.
return {
'name': aes.decrypt(instance.name),
'address': aes.decrypt(instance.address)
}
警告:
更改 secrete_key 时要小心。如果丢失,则无法取回数据。
我想加密我的 DRF 项目 API 响应 有没有办法加密大型响应,以便我只能访问前端的数据? 我想加密所有回复。
是的,这是可能的,我已经自己应用了。您可以使用直接应用于序列化器的 AES256(高级加密标准 256)来实现。
基本上加密都是靠django的secret key来加解密。
因此,将有两个函数encrypt()
和decrypt()
,您将在其中申请每个需要加密发送到数据库中的字段。以及在端点命中 GET 请求时解密。
You can get these function example and implementation here.
示例:
from rest_framework import serializers
from django.conf import settings
from aesencryption import AESCipher
aes = AESCipher(settings.SECRET_KEY[:16], 32)
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ['name', 'address']
def create(self, validated_data):
# Here the data will be inserted into the db encrypted.
validated_data['name'] = aes.encrypt(validated_data['name'])
validated_data['address'] = aes.encrypt(validated_data['address'])
return MyModel.objects.create(**validated_data)
def to_representation(self, instance):
# Here you will decrypt the data from the db.
return {
'name': aes.decrypt(instance.name),
'address': aes.decrypt(instance.address)
}
警告: 更改 secrete_key 时要小心。如果丢失,则无法取回数据。