BaseSerializer
data
is_valid()
validated_data
errors
save()
to_representation()
to_internal_value()
create()
update()
提供的是和serializer一样的接口,可以适配使用普通序列化器的view,但是不在浏览器中产生对应的form
使用时可通过派生来构建只读序列化器(只实现了to_representation方法)或构建读写序列化器(另实现to_internal_value方法,这时即可使用is_valid validated_data errors),如果想用save函数,那么需要实现create和update
to_internal_value返回的就是validated_data,校验中抛出的异常中可获得errors
高级用法
改变序列化和你序列化的行为,重载to_representation to_internal_value方法,添加新的行为给序列化器基类,修改现有类的行为,提升一个频繁请求的返回大量数据的api效率
to_representation接收需要序列化的对象,返回一个原始的表示形式,一般是python内置的数据结构,最终的明确结构需要看使用的render
to_internal_value接收未被校验的数据,应该返回校验好的数据(validated_data),如果调用了save,返回的值会被传递到create和update中,如果校验失败,会抛出ValidationError异常,errors中包含一个错误信息的字典,如果不想改变逆序列化行为但想提供对象级别的校验,可以重载validate方法
序列化器继承,可以把通用的字段和方法放入父类中,在子类中设置字段为None可以移除该字段(不能阻止ModelSerializer生成字段,还是要通过field和exclude),同时如果想继承Meta则需要声明
动态修改字段,在序列化器被初始化后,可以通过fields来获取字段并动态地修改(修改初始化函数来动态修改相应字段)
UserSerializer(user)
UserSerializer(user, fields=('id', 'email'))
网友评论