视图集是什么?
是一群逻辑操作的功能合集,并采用路由映射的方法进行功能选择
ModelViewSet
继承GenericAPIView,并包括用于各种动作实现方式,需要指定数据
1. ModelViewSet视图集功能及路由映射
# 使用ModelViewSet实现增删查改操作
from rest_framework.viewsets import ModelViewSet
class PeopleViewSet(ModelViewSet):
queryset = People.objects.all() # 指定查询结果集
serializer_class = PeopleSerializer2 # 指定序列化器
2.路由映射
path('people2/',views.PeopleViewSet.as_view({'get':'list','post':'create'})),
path('people2/<int:pk>/',views.PeopleViewSet.as_view({'get':'retrieve','put':'update','delete':'destroy'})),
DRF路由映射
简化路由
DefaultRouter路由生成
功能更强大,访问路由.json可以直接看到json格式返回
# 1.生成路由对象
router = routers.DefaultRouter()
# 2.使用路由对象生成路由
# 参数:1.路径名 2.调用视图集 3.给生成的路由起个名
router.register('people3',views.PeopleViewSet,'people3')
# 3.路由追加
urlpatterns += router.urls
生成的路由
[
<URLPattern '^people3/$' [name='people3-list']>,
<URLPattern '^people3\.(?P<format>[a-z0-9]+)/?$' [name='people3-list']>,
<URLPattern '^people3/(?P<pk>[^/.]+)/$' [name='people3-detail']>,
<URLPattern '^people3/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$' [name='people3-detail']>,
<URLPattern '^$' [name='api-root']>,
<URLPattern '^\.(?P<format>[a-z0-9]+)/?$' [name='api-root']>
]
SimplaeRouter路由生成
注册路由
# 1.生成路由对象
router = routers.SimpleRouter()
# 2.使用路由对象生成路由
# 参数:1.路径名 2.调用视图集 3.给生成的路由起个名
router.register('people3',views.PeopleViewSet,'people3')
# 3.路由追加
urlpatterns += router.urls
print(router.urls)
生成的路由
[
<URLPattern '^people3/$' [name='people3-list']>,
<URLPattern '^people3/(?P<pk>[^/.]+)/$'[name='people3-detail']>
]
两种路由生成方式区别
- SimpleRouter`:最基本的路由映射方式,只会将视图集具备的混入类功能进行路由的生成
- DefaultRouter:更加高级,包含有drf根页面的路由,不只是视图集所包含的视图部分