DRF框架(九)——视图集ViewSet,ModelViewSet,将增删改查写到一个类里面,viewsetmixin (注意路由设置)

目录

  • 总结
  • 继承ViewSet实现增删改查
  • 路由
  • 继承GenericViewSet实现增删改查
  • 路由

总结

1.常用视图集父类  
ViewSet  继承自APIView和ViewSetMixin,没有提供任何方法,

需要自己写 
 GenericViewSet  继承GenericAPIView和ViewSetMixin,
其中GenericAPIView提供了基础方法,可以直接搭配Mixin扩展类使用,所以我们选这个  

ModelViewSet    继承GenericViewset,但同时也包括ListModelMixin、
CreateModelMixin等mixin扩展类1)视图集都是默认优先继承ViewSetMixin类,再继承一个视图类(GenericAPIView或APIView) 

 2)ViewSetMixin提供了重写的as_view()方法,继承视图集的视图类,配置路由时调用as_view()必须传入 请求名-函数名 映射关系字典
       eg: url(r'^v5/books/$', views.BookGenericViewSet.as_view({
     'get': 'my_get_list'})),
       表示get请求会交给my_get_list视图函数处理

继承ViewSet实现增删改查

ViewSet,只要继承了这个,就实现了增删改查,但是要重写查询全部和详情。
最主要的就是路由的书写

"""以下是APIView的视图集"""
# class BookViewSet(ViewSet):
#     """视图集"""
#
#     def list(self, request):  # 重写了查询全部
#         qs = BookInfo.objects.all()
#         serializer = BookInfoModelSerializer(qs, many=True)
#         return Response(serializer.data)
#
#     def retrieve(self, request, pk):   #  重写了查询一个数据
#         try:
#             book = BookInfo.objects.get(id=pk)
#         except BookInfo.DoesNotExist:
#             return Response(status=status.HTTP_404_NOT_FOUND)
#
#         serializer = BookInfoModelSerializer(book)
#         return Response(serializer.data)

路由

    # ViewSet视图集指定路由
    # 列表视图的路由GenericAPIView
    url(r'^books/$', views.BookViewSet.as_view({
     'get': 'list'})),
    # 详情视图的路由GenericAPIView
    url(r'^books/(?P\d+)/$', views.BookViewSet.as_view({
     'get': 'retrieve'})),

继承GenericViewSet实现增删改查

class BookViewSet(ModelViewSet):
    """视图集"""
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoModelSerializer

路由

router = SimpleRouter()  # 创建路由器(路由器只能结束视图集一起使用) 
# 默认只为标准了增删改查行为生成路由信息,如果想让自定义的行为也生成路由需要在自定义行为上用
# action装饰进行装饰
router.register(r'books', views.BookViewSet)  # 注册路由
urlpatterns += router.urls  # 把生成好的路由拼接到urlpatterns

以上就可以实现增删改查

你可能感兴趣的:(Django_rest框架,python)