Django DRF 序列化相关参数
Django Rest Framework的ModelSerializer是一个方便的工具,可以帮助我们快速地创建RESTful API。以下是ModelSerializer的各个参数和方法以及参数验证的详细解释:
ModelSerializer参数:
- model:必需参数,指定序列化的模型。
- fields:序列化器要序列化的字段。可以是一个字符串列表,也可以是’all‘,表示所有字段。
- exclude:序列化器不序列化的字段。可以是一个字符串列表。
- read_only_fields:只读字段。只在序列化输出时使用,不在反序列化输入时使用。可以是一个字符串列表。
- write_only_fields:只写字段。只在反序列化输入时使用,不在序列化输出时使用。可以是一个字符串列表。
- validators:用于验证输入的序列化器的全局验证器。应该是一个列表或元组,其中每个元素是一个验证函数。
- extra_kwargs:为模型字段指定额外的关键字参数,比如设置默认值或最大长度。
- depth:控制嵌套关系的深度。如果需要嵌套多层关系,可以设置depth的值来控制嵌套的层数。
create()和update()方法:
在ModelSerializer中,我们可以重写create()和update()方法,以便在创建和更新对象时执行自定义的逻辑。create()方法接收一个经过验证的数据字典,并返回创建的模型实例。update()方法接收一个模型实例、经过验证的数据字典,返回更新后的模型实例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15class 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 instancevalidate()方法:
在ModelSerializer中,我们可以重写validate()方法,以便在对序列化数据进行验证时执行自定义的逻辑。validate()方法接收一个经过验证的数据字典,并返回验证后的数据字典。如果验证失败,可以抛出ValidationError异常。
1
2
3
4
5
6
7
8
9
10class 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参数验证:
DRF提供了各种验证器,可以应用于序列化器的字段或者整个序列化器本身。常用的验证器包括:
- validators:全局验证器,用于验证整个序列化器的数据。
- required:指定字段是否为必填项。
- allow_null:指定字段是否允