1、模型序列化的作用是什么?模型序列化作为DRF中非常关键的一步,主要有3个作用:序列化后的数据,用于将模型序列化为JSON格式的对象,方便数据返回表单校验在表单请求中,用于校验用户上传的数据满足项目要求可以进行数据更新、数据创建、数据保存等数据操作2.表单字段验证在指定需要序列化的字段时,可以设置字段类型,默认值,可读可写,验证错误信息等,然后针对表单验证表单字段也有3种方式,对应:2-1序列化字段,以参数的形式制定.例如字段名的数据类型为字符串,max_length指定最大长度,必须输入,使用“error_messages”设置验证失败的提示信息#最大长度50#required=True:必须是entered#不传则报错:namemustbepassedname=serializers.CharField(max_length=50,required=True,error_messages={"required":"namemustbepassed"})2-2重写validate(self,attrs)验证方法。参数attrs包含所有字段。我们只需要自定义验证逻辑即可。如果验证失败,则抛出“serializers.ValidationError”异常。比如这里验证名称必须包含关键字“深圳”,否则会抛出异常(表示验证失败)defvalidate(self,attrs):"""表单数据验证:paramattrs::return:"""print(attrs)if"Shenzhen"notinattrs.get("name"):raiseserializers.ValidationError('名称不包含[Shenzhen],验证失败!')returnattrs2-3rewritevalidate_fieldname(self,value)该方法单独验证一个字段。例如,我们仍然验证名称字段。如果验证如果不通过,就主动抛出“serializers.ValidationError”异常defvalidate_name(self,name):"""验证name字段:paramname:::return:"""if"Shenzhen"notinname:raiseserializers.ValidationError('名称不包含[深圳],验证失败!')returnname3.重写create和update方法创建的序列化类继承自serializers.Serializer类这里重写其中的update()和create()函数,update(self,instance,validated_data)用于更新数据,更新数据中的实例的参数validated_datacreate(self,validated_data)validated_data作为关键字参数创建模型类GoodsSerializer(serializers.Serializer):#需要一个序列Transformedfields#注意:自动生成的字段只会涉及读取场景id=serializers.IntegerField(read_only=True)#error_messages:定义错误信息name=serializers.CharField(max_length=200,required=True,error_messages={"required":"必须传递name参数"})defupdate(self,instance,validated_data):"""更新数据,将validated_data中的数据更新为instance:paraminstance::paramvalidated_data::return:"""#修改数据instance.name=validated_data.get("name",instance.name)#保存并更新instance.save()returninstancedefcreate(self,validated_data):"""创建数据:paramvalidated_data::return:"""#goods:modelreturnGoods.objects.create(**validated_data)最近整理了上百亿的Python学习资料,包括初学电子书、教程、源码等,分享给大家免费和大家一起学习!想上“Python编程学习圈”,发“J”免费领取
