Django Rest Framework - маскировка значений ответа

Мне интересно, как лучше всего маскировать определенные части ответа. Для объяснения я воспользуюсь примером. Допустим, у меня есть модель Person с first_name, last_name и email. Я использую PersonSerializer, чтобы вернуть эти данные.

Примером ответа может быть

{
  "first_name": "John",
  "last_name": "Doe",
  "email": "johndoe@gmail.com"
}

Я хочу "скрыть" электронное письмо при представлении его в качестве ответа. Я все еще хочу, чтобы он присутствовал в качестве ключа, я просто хочу скрыть значение. Поэтому я хочу добиться такого ответа, сначала установив этот класс в моем PersonModel

Класс:

    class MASK:
        mask_fields = (
            'email'
            ...
        ) //there can be multiple values here

Чтобы получить такой ответ:

{
  "first_name": "John",
  "last_name": "Doe",
  "email": "__MSK__" // so it get's masked
}

Таким образом, это не должно влиять на сериализацию при создании нового пациента с тем же классом сериализатора.

У кого-нибудь есть идеи, как лучше поступить? Может быть, переопределение метода to_representation или?

Что вы можете сделать, вы можете просто написать свою собственную функцию маски

class DemoSerializer(serializers.ModelSerializer):
    email = serializers.SerializerMethodField()

    class Meta:
        model = Demo
        fields = ("id","email")
    
    def get_email(self,obj):
        email_id = str(id) + "-" + random.randrange(1,9999999) 
        # you can write your on Hashing logic
        return email_id

Для будущих ссылок вы можете отделить от "-" и вы получили ваш obj ID

Вернуться на верх