1-视图中使用反序列化验证方法
-
简单的字段限制验证
-
获取前端数据
-
赋值给序列化器 data= 解析后的前端数据
-
验证 ser.is_valid() 出现在反序列化中
- raise_exception=True会向前端返回HTTP 400 Bad Request响应。
-
-
使用序列化器进行反序列化时,需要对数据进行验证后,才能获取验证成功的数据或保存成模型类对象。
在获取反序列化的数据前,必须调用**is_valid()**方法进行验证,验证成功返回True,否则返回False。
验证失败,可以通过序列化器对象的errors属性获取错误信息,返回字典,包含了字段和字段的错误。如果是非字段错误,可以通过修改REST framework配置中的NON_FIELD_ERRORS_KEY来控制错误字典中的键名。
验证成功,可以通过序列化器对象的validated_data属性获取数据。
2-序列化器中单一字段验证和多个字段验证方法的使用
-
顺序:利用参数验证 --》使用单一字段验证 --》使用多个字段验证
-
验证也可以修改数据内容
-
单一字段验证
validate_<field_name>
def validate_btitle(self, value): if 'django' not in value.lower(): raise serializers.ValidationError("错误提示") return value
-
多个字段验证
validate
def validate(self, attrs): bread = attrs['bread'] bcomment = attrs['bcomment'] if bread < bcomment: raise serializers.ValidationError('错误提示') return attrs
-
外链式验证 —》一般情况下是有成型的工具类才使用频繁
-
在字段中添加validators选项参数,也可以补充验证行为
btitle = serializers.CharField(label='名称', max_length=20, validators=[about_django])
def about_django(value):
if 'django' not in value.lower():
raise serializers.ValidationError("错误提示")
3-序列化器中保存和更新数据方法的使用
-
保存和更新过程中使用的数据是ser.validated_data 而不是ser.data
-
如果使用ser.data可能出现数据错误
-
保存
- 序列化器中定义creat方法
def create(self, validated_data): """新建""" return BookInfo.objects.create(**validated_data)
- ser = BookModelSerialize(data=data_dict)
- 在视图中调用ser.save()
-
更新
-
序列化器中定义update方法
def update(self, instance, validated_data): # 更新数据 # instance 要更新的数据对象 instance.btitle = validated_data['btitle'] instance.save() return instance
-
ser = BookSerializer(book, data=data_dict)
-
在视图中调用ser.save()
-
4-反序列化过程中save方法原理说明
-
save方法根据参数判断调用create 还是 updata
-
如果创建序列化器对象的时候,没有传递instance实例,则调用save()方法的时候,create()被调用,相反,如果传递了instance实例,则调用save()方法的时候,update()被调用。
-
在对序列化器进行save()保存时,可以额外传递数据,这些数据可以在create()和update()中的validated_data参数获取到
serializer.save(参数名=数据)
自己重写***serializer中的方法一定要给一个正确类型返回值,*否则会报错