欢迎访问宙启技术站
智能推送

rest_framework.serializers中常用的数据转换器和处理器

发布时间:2023-12-27 10:44:31

在Django REST framework(DRF)的serializers模块中,有许多常用的数据转换器和处理器,这些可以帮助我们在序列化和反序列化数据时进行一些常见的操作。下面是一些常用的转换器和处理器以及其使用示例:

1. CharField:用于处理字符数据类型的字段。

from rest_framework import serializers

class MySerializer(serializers.Serializer):
    name = serializers.CharField(max_length=100)

serializer = MySerializer(data={'name': 'John'})
serializer.is_valid()  # True

serializer.data  # {'name': 'John'}
serializer.validated_data  # {'name': 'John'}

2. IntegerField:用于处理整数数据类型的字段。

class MySerializer(serializers.Serializer):
    age = serializers.IntegerField()

serializer = MySerializer(data={'age': '25'})
serializer.is_valid()  # True

serializer.data  # {'age': 25}
serializer.validated_data  # {'age': 25}

3. BooleanField:用于处理布尔值数据类型的字段。

class MySerializer(serializers.Serializer):
    is_active = serializers.BooleanField()

serializer = MySerializer(data={'is_active': 'true'})
serializer.is_valid()  # True

serializer.data  # {'is_active': True}
serializer.validated_data  # {'is_active': True}

4. DateTimeField:用于处理日期和时间数据类型的字段。

class MySerializer(serializers.Serializer):
    created_at = serializers.DateTimeField()

serializer = MySerializer(data={'created_at': '2021-10-10T10:00:00Z'})
serializer.is_valid()  # True

serializer.data  # {'created_at': '2021-10-10T10:00:00Z'}
serializer.validated_data  # {'created_at': datetime.datetime(2021, 10, 10, 10, 0, tzinfo=<UTC>)}

5. ListField:用于处理列表数据类型的字段。

class MySerializer(serializers.Serializer):
    numbers = serializers.ListField(child=serializers.IntegerField())

serializer = MySerializer(data={'numbers': ['1', '2', '3']})
serializer.is_valid()  # True

serializer.data  # {'numbers': [1, 2, 3]}
serializer.validated_data  # {'numbers': [1, 2, 3]}

6. SerializerMethodField:用于处理自定义方法返回值的字段。

class MyModel(models.Model):
    name = models.CharField(max_length=100)

class MySerializer(serializers.ModelSerializer):
    full_name = serializers.SerializerMethodField()

    class Meta:
        model = MyModel
        fields = ['name', 'full_name']

    def get_full_name(self, obj):
        return f'Mr. {obj.name}'

serializer = MySerializer(instance=MyModel(name='John'))
serializer.data  # {'name': 'John', 'full_name': 'Mr. John'}

这些转换器和处理器只是serializers模块中的一小部分常见工具,DRF还提供了许多其他功能丰富的转换器和处理器,使得处理不同类型的数据非常方便。这些转换器和处理器使得我们能够更轻松地进行数据序列化和反序列化,并且可以提供自定义的转换逻辑。