美文网首页
BaseSerializer和高级用法

BaseSerializer和高级用法

作者: xncode | 来源:发表于2021-04-29 11:23 被阅读0次

    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'))
    

    相关文章

      网友评论

          本文标题:BaseSerializer和高级用法

          本文链接:https://www.haomeiwen.com/subject/bzbhqltx.html