Django DRF 序列化相关参数

Django Rest Framework的ModelSerializer是一个方便的工具,可以帮助我们快速地创建RESTful API。以下是ModelSerializer的各个参数和方法以及参数验证的详细解释:

  1. ModelSerializer参数:

    • model:必需参数,指定序列化的模型。
    • fields:序列化器要序列化的字段。可以是一个字符串列表,也可以是’all‘,表示所有字段。
    • exclude:序列化器不序列化的字段。可以是一个字符串列表。
    • read_only_fields:只读字段。只在序列化输出时使用,不在反序列化输入时使用。可以是一个字符串列表。
    • write_only_fields:只写字段。只在反序列化输入时使用,不在序列化输出时使用。可以是一个字符串列表。
    • validators:用于验证输入的序列化器的全局验证器。应该是一个列表或元组,其中每个元素是一个验证函数。
    • extra_kwargs:为模型字段指定额外的关键字参数,比如设置默认值或最大长度。
    • depth:控制嵌套关系的深度。如果需要嵌套多层关系,可以设置depth的值来控制嵌套的层数。
  2. create()和update()方法:

    在ModelSerializer中,我们可以重写create()和update()方法,以便在创建和更新对象时执行自定义的逻辑。create()方法接收一个经过验证的数据字典,并返回创建的模型实例。update()方法接收一个模型实例、经过验证的数据字典,返回更新后的模型实例。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class YourModelSerializer(serializers.ModelSerializer):
    class Meta:
    model = YourModel
    fields = '__all__'

    def create(self, validated_data):
    # 自定义逻辑
    return YourModel.objects.create(**validated_data)

    def update(self, instance, validated_data):
    # 自定义逻辑
    instance.name = validated_data.get('name', instance.name)
    instance.email = validated_data.get('email', instance.email)
    instance.save()
    return instance
  3. validate()方法:

    在ModelSerializer中,我们可以重写validate()方法,以便在对序列化数据进行验证时执行自定义的逻辑。validate()方法接收一个经过验证的数据字典,并返回验证后的数据字典。如果验证失败,可以抛出ValidationError异常。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class YourModelSerializer(serializers.ModelSerializer):
    class Meta:
    model = YourModel
    fields = '__all__'

    def validate(self, data):
    # 自定义逻辑
    if 'email' in data and '@' not in data['email']:
    raise serializers.ValidationError('Invalid email address')
    return data
  4. 参数验证:

    DRF提供了各种验证器,可以应用于序列化器的字段或者整个序列化器本身。常用的验证器包括:

    • validators:全局验证器,用于验证整个序列化器的数据。
    • required:指定字段是否为必填项。
    • allow_null:指定字段是否允