视图集(ModelViewSet)

                        **ModelViewSet-->**

继承自GenericAPIVIew,同时包括了ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestoryModelMixin。(增删改查)

因为ModelViewSet扩展GenericAPIView,我们通常需要提供queryset和serializer_class属性

class BookListModelViewSet(ModelViewSet):
     queryset = BookInfo.objects.all()
     serializer_class = BookInfoSerializer

如果有除常规的(增删改查)可以使用@action装饰器来定义它们,额外的操作可以用于对象列表或者单个实例,为了表明是否是单个实例,将detail参数设置为True.
先导包 from rest_framework.decorators import action
在上面代码的基础上添加装饰器:

class BookListModelViewSet(ModelViewSet):
     queryset = BookInfo.objects.all()
     serializer_class = BookInfoSerializer
     #detail为True表示单个实例   url:     r'^dbooks/{pk}/$	     
     @action(methods=['post'], detail=True)
     def set_bookname(self, request, pk=None):
     	pass
     #detail为False表示列表,网址为这种形式:^books/order_comment/$
	 @action(detail=False)
	 def order_comment(self, request):
	 	pass

路由Router:(自动生成视图集路由列表信息)
REST framework提供了两种方式:
SimpleRouter
DefaultRouter
1.导包
from rest_framework.routers import DefaultRouter,SimpleRouter
2.创建对象
router = SimpleRouter()
3.注册参数分别为 ( 视图集的路有前缀 视图集(定义的类视图函数) 路由名称的前缀)
router.register(‘books’,views.BookModelViewSet,basename=“books”)
books-list
books-datail(如下图name=)
#添加路由数据有两种方式 
urlpatterns += router.urls 在urlpatterns外面
url(r’^’, include(router.urls)) 在urlpatterns里面

DefaultRouter与SimpleRouter的区别是:
当使用的是SimpleRouter在跟路由的情况下不显示数据.(如下图所示)视图集(ModelViewSet)_第1张图片

你可能感兴趣的:(视图集(ModelViewSet))