1 前置准备
1.1 准备模型类
1.2 准备一个序列化器类(以ModelSerializer为例)
2 与APIView的区别
如果使用APIView,每每实现一张表的增删改查查的五个接口,都要编写大量逻辑重复的代码
以Publish视图实现的get()、post()接口为例,当我们实现其他视图的get()、post()接口时,要更改的无非只有上图红框中的代码【模型及序列化器对象】,其余一致即可。
3 基础介绍
该类的父类是APIView,是在父类的基础上又扩展了额外的功能。
主要提供了以下是个核心实例方法:
(1)get_queryset(self)
(2)get_serializer_class(self)
(3)get_serializer(self)
(4)get_object(self)
由上述2引出的问题,我们可以将模型相关的数据存放到queryset类变量中,将对应序列化器的类名存放到serializer_class类变量中。
注:类变量名必须如此命名,不得更改
3.1 get_queryset(self)
在接口函数调用这个方法,可以获取到类变量queryset的值
3.2 get_serializer_class(self)
在接口函数调用这个方法,可以获取到类变量serializer_class的值,即序列化器类的类名,可以通过它来实例化序列化器对象
3.3 get_serializer(self)
在接口函数调用这个方法,本质就是3.2实例图中红框的代码,只不过3.2的方式过于冗长,因此做了封装
3.4 get_object(self)
根据pk获取某一个模型类对象
注:在匹配路由时,需要设置具名分组,且名需为pk
4 基于上述方法实现增删改查查五个接口
4.1 get() 查所有
参考3.3的示例图即可
4.2 post() 添加数据
4.3 get() 根据pk查单个
4.4 put() 根据pk修改
4.5 delete() 根据pk删除
5 总结
根据4的实例,如果想再实现其他资源的接口,则直接复制以上代码,只需修改类变量serializer_class和queryset以及定义对应模型类的序列化器即可,而关于五个接口函数可直接照搬。