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