Cod*_*ise 7 python django django-models django-rest-framework
我有一个包含敏感数据的模型,比如社会保险号,我想将序列化数据转换为仅显示最后四位数字。
我存储了完整的社会安全号码:123-45-6789。我希望我的序列化程序输出包含:***-**-6789
我的型号:
class Employee (models.Model):
name = models.CharField(max_length=64,null=True,blank=True)
ssn = models.CharField(max_length=16,null=True,blank=True)
Run Code Online (Sandbox Code Playgroud)
我的序列化器:
class EmployeeSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = Employee
fields = ('id','ssn')
read_only_fields = ['id']
Run Code Online (Sandbox Code Playgroud)
您可以使用SerializerMethodField:
class EmployeeSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
ssn = SerializerMethodField()
class Meta:
model = Employee
fields = ('id','ssn')
read_only_fields = ['id']
def get_ssn(self, obj):
return '***-**-{}'.format(obj.ssn.split('-')[-1]
Run Code Online (Sandbox Code Playgroud)
如果您不需要更新 ssn,只需用 a 遮蔽该字段SerializerMethodField并get_ssn(self, obj)在序列化程序上定义即可。
否则,最直接的方法可能就是覆盖.to_representation():
def to_representation(self, obj):
data = super(EmployeeSerializer, self).to_representation(obj)
data['ssn'] = self.mask_ssn(data['ssn'])
return data
Run Code Online (Sandbox Code Playgroud)
请'ssn' in data根据需要添加特殊情况处理 ( )。
| 归档时间: |
|
| 查看次数: |
3982 次 |
| 最近记录: |