一.ViewSet
1.视图集是什么
视图集简单来说就是一群视图逻辑操作的功能合集,并可采用路由映射的方式进行功能选择,编写的内置逻辑方法不再是使用请求命名,而是使用功能来进行命名
直白来说,为了防止请求冲突,视图集会将增删改查操作集合到一个视图里
2.action是什么
视图集类不再实现get、post等方法,而是实现动作action如list、create等,视图集只在使用as_view方法的时候,才会将action动作与具体请求方式对应上
就是说视图集类不再用get put post delete方法命名函数,而是用action这个动作来实现
action动作包括
利用视图集代码实现增删查改
我们可以看到,如果不是在ViewSet视图集就在一个类里来同时编写查询全部与查询单个数据两个方法的话,都是get请求会发生冲突
而使用action动作来命名就不会冲突。
路由映射也要发生改变
as_view(‘请求’:‘映射方法’)
二.混入类视图集ModelViewSet
1.什么是modelviewset
在ModelViewSet从类继承 GenericAPIView,并包括用于各种动作实现方式中,通过在各种混入类的行为混合,包含了***.list***、.retrieve、.create、.update、.partial_update、和***.destroy等方法,继承ListModelMixin***、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestroyModelMixin
2.代码的编写
导包
from rest_framework.viewsets import ModelViewSet
代码编写
view视图层
# 使用ModelViewSet实现增删查改操作
class PeopleViewSet(ModelViewSet):
queryset = People.objects.all() # 指定查询结果集
serializer_class = PeopleSerializer2 # 指定序列化器
url
三.DefaultRouter路由生成
1.需要的导包
在编写完ModelViewSet后,我们就要开始简化url模块的代码
from rest_framework import routers
2.路由的编写
3.SimplaeRouter路由生成
1.SimplaeRouter为DefaultRouter的子类。
2.使用方法
router = routers.SimplaeRouter()
router.register('people2',views.PeopleViewSet,'people2')
urlpatterns += router.urls
3.两种路由生成方式区别及根路由是什么
- SimpleRouter`:最基本的路由映射方式,只会将视图集具备的混入类功能进行路由的生成
- DefaultRouter:对比与SimpleRouter更加高级,包含有drf根页面的路由,不只是视图集所包含的视图部分
本单元引用部分来自教案