django的rest_framework的一大特色是序列化器,其封装了视图中关于用户请求,验证及响应数据的处理部分,使得程序简洁化。此DRF框架中将数据模型对象转化为json、xml等可传输或存档的格式的过程称为序列化,反之称为反序列化。序列化器是专注于此类行为的类,有自定义序列化器,模型类序列化器,视图集合三类。
1.视图函数
2.类视图
1.自定义序列化器
自定义的序列化器serializer主要包括模型对象,验证器件,数据创建,数据更新等四部分。
模型对象是序列化的字段对象。其字段及类型有:CharField,DatetimeField,BooleanField,IntegerField等,其参数有null,blank,max_length,max_value等。其通用参数有 read_only,write_only,required,default.对于关联对象的嵌套序列化,其字段可以是PrimaryKeyRelate(必须添加many参数),StringRelatedField,SlugRelatedField,to_presentation,或者直接采用关联对象的序列化器
验证器是提交数据时经过验证后才能进行保存。模型对象中的字段参数属于初级验证,也可以定义validator集合,或者定义validate方法进行进一步的验证。is_valid()进行校验。
序列化实例时参数有instance,data,many,partial。many表明序列化的对象instance是一个查询集合。partial表明需要序列化的对象其data参数可以是部分字段。
2.模型类序列化器
3.模型类视图
模型类视图按层级分为三类APIView,GenericAPIView和扩展类视图××Mixin.APIView视图的主要特点是封装request和response类,可以满足用户的各种请求json、xml格式。另外增加了鉴权,限流等。GenericAPIView视图类继承自APIView类。并增加了用户对单一对象的操作处理,封装了queryset和serilizer_class类,并提供了get_queryset、get_serializerclass,get_object,get_serializer方法供用户调用。为了满足用户的各种请求方式,django提供了扩展类,有ListModeMixin,CreateModeMixin,UpdateModeMixin,DestroyModeMixin,RetrieveModeMixin等类,方便用户对不同请求方式的处理,但调用时需要联合GenericAPIView一起使用。为进一步简化,针对多请求方式,用户还提供了ListAPIView,CreateAPIView,UpdateAPIView,DestroyAPIView,RetrieveAPIView,ListCreateAPIView,RetrieveUpdateAPIView,RetrieveDestroyAPIView,RetrieveUpdateDestroyAPIView等9个类,其已经封装完全,可直接使用。也可复合使用,但可能需要重写类中的方法。
4.模型类视图集:
drf框架自带的视图集有ViewSet,GenericAPIViewSet,ModelsViewSet,ReadOnlyViewSet.视图集的核心是基于action而非直接的请求方式(post,get)等将请求和视图方法进行绑定,其基于ViewSetMixin类来实现。其他的视图集都是基于此类与××View的扩展。ViewSet视图集不带任何action,只是封装了response,request来满足用户的各种请求格式。另增加了鉴权,限流,认证等功能。GenericAPIViewSet视图集自带了queryset和serializer_class及相关的方法。ModelsViewSet封装了增删改查列表5种常用的请求动作。ReadOnlyViewSet封装了list和retrieve两种请求动作,方便用户查阅。
5.路由
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:web之django的序列化器汇总 - Python技术站