drf之视图子类、视图集、路由

本文介绍了Django REST Framework(DRF)中的视图子类,包括9个视图子类的功能和应用场景。重点讨论了ModelViewSet、ViewSetMixin以及ReadOnlyModelViewSet,讲解了它们的源码分析、自定义方法和路由配置。同时,文章还涵盖了路由的使用,如SimpleRouter和DefaultRouter,并介绍了action装饰器的用法以及如何重写视图类的方法来定制行为。
摘要由CSDN通过智能技术生成

1 9个视图子类

9个视图子类就是GenericAPIView和5个视图拓展类的组合

通过from rest_framework.generics import 导入,写视图类就只用继承视图子类

  1. ListAPIView,只用于展示所有
  2. CreateAPIView,添加一条
  3. ListCreateAPIView,展示所有和添加一条
  4. RetrieveAPIView,展示一条
  5. DestroyAPIView,删除一条
  6. UpdateAPIView,修改一条
  7. RetrieveUpdateDestroyAPIView,展示、修改、删除一条
  8. RetrieveDestroyAPIView,展示一条,删除一条
  9. RetrieveUpdateAPIView,展示一条,修改一条

以后想写5个接口中的某一个或某几个或所有,只需要选择继承不同的类即可,类中只需要配置两个类属性

1.1 视图类

想写 publish: 查询所有,查询单条,修改一条,新增一条,删除一条的接口

class PublishView(ListCreateAPIView):
    queryset = Publish.objects.all()
    serializer_class = PublishSerializer


class PublishDetailView(RetrieveUpdateDestroyAPIView):
    queryset = Publish.objects.all()
    serializer_class = PublishSerializer

1.2 路由

路由没变

path('publish/', PublishView.as_view()),
path('publish/<int:pk>', PublishView.as_view()),

2 视图集

将使用同一个库和序列化类的视图整合起来

2.1 ModelViewSet

视图函数
from rest_framework.viewsets import ModelViewSet
class PublishView(ModelViewSet):
    queryset = Publish.objects.all()
    serializer_class = PublishSerialize
路由
path('publish/', PublishView.as_view({
   'get':'list','post':'create'})),
path('publish/<int:pk>', PublishView.as_view({
   'get':'retrieve','put':'update','delete':'destroy'})),

2.1.1 ModelViewSet源码分析

  1. 有查询所有接口
    get–list----》拿到所有数据,序列化–返回

  2. 新增一条
    post—create—》之前咱们写的新增的代码一样的

2.2 ViewSetMixin

ModelViewSet中继承了五个视图拓展类和GenericViewSet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值