前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DRF框架(九)——视图集ViewSet,ModelViewSet,将增删改查写到一个类里面,viewsetmixin (注意路由设置)

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

作者头像
一写代码就开心
发布2021-03-02 14:42:49
1.8K0
发布2021-03-02 14:42:49
举报
文章被收录于专栏:java和python

目录

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

总结

代码语言:javascript
复制
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,只要继承了这个,就实现了增删改查,但是要重写查询全部和详情。 最主要的就是路由的书写

代码语言:javascript
复制
"""以下是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)

路由

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

继承GenericViewSet实现增删改查

代码语言:javascript
复制
class BookViewSet(ModelViewSet):
    """视图集"""
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoModelSerializer

路由

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

以上就可以实现增删改查

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 总结
  • 继承ViewSet实现增删改查
  • 路由
  • 继承GenericViewSet实现增删改查
  • 路由
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档