我需要加密/解密从Django Rest Framework提供的数据。
models.py
class Widget(models.Model):
title = models.CharField(max_length=100)
description = models.CharField(max_length=1024)
username = models.CharField(max_length=50)
code = models.CharField(max_length=1024)
owner = models.ForeignKey('MyAppUser', related_name='MyAppUser_owner')
list = models.ForeignKey('WidgetList')
根据登录的用户,密钥会有所不同。
serializers.py
class WidgetSerializer(serializers.ModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username')
list = serializers.CharField(source='list.name')
class Meta:
model=Widget
fields = ('id', 'title', 'description', 'username', 'code', 'owner', 'list')
views.py
class WidgetList(generics.ListCreateAPIView):
queryset = Widget.objects.all()
serializer_class = WidgetSerializer
filter_class = WidgetFilter
def get_queryset(self):
owner = self.request.user
return super(WidgetList, self).get_queryset().filter(owner=self.request.user)
因此,根据登录的用户(每个用户的用户密钥不同),我需要运行以下代码 -
GET
for object in queryset:
object.code = decrypt_code(masterkey,
userkey,
object.code)
POST
object.code = encrypt_code(masterkey,
userkey,
object.code)
如何在不破坏现有过滤器代码的情况下将此代码集成到视图中,或者如何将其集成到序列化器中?
答案 0 :(得分:1)
要解密,您可以在序列化程序中覆盖.validate_code()
方法。
要加密,您可以覆盖序列化程序中的.to_representation()
方法。
您可以了解更多信息here。