DRF中的视图之GenericAPIView

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以及定义对应模型类的序列化器即可,而关于五个接口函数可直接照搬。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陪我一起学编程

生活不易,求求鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值