django--drf-视图集

ViewSet
位置 from rest_framework.viewsets import ViewSet
继承的是ViewSetMixinAPIView

class BookViewSet(ViewSet):
    '''视图集,ViewSetMixin + APIView 重写了as_views'''
    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)

URL路由配置

GenericViewSet

# class BookViewSet(ListModelMixin,RetrieveModelMixin,GenericViewSet):
#ModelViewSet 五个mixin+GenericViewSet
class BookViewSet(ModelViewSet):
    '''视图集 重写了as_views+ViewSetMixin+GenericAPIView'''
    queryset = BookInfo
    serializer_class = BookInfoModelSerializer
   

url路由设置

router = DefaultRouter()#创建路由器
router.register(r'books',views.BookInfoView)#注册路由
urlpatterns+=router.urls#把生成好的路由拼接到urlpatterns里面 列表+列表

等价于==>

以上只能满足正常标准的增删改查(查多查一),如果要新增另外的查询如下

class BookViewSet(ModelViewSet):#ModelViewSet 五个mixin+GenericViewSet
    '''视图集 重写了as_views+ViewSetMixin+GenericAPIView'''
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoModelSerializer


    def latest(self,request):
        book= BookInfo.objects.latest('id')  #获取最后一本书
        serializer = self.get_serializer(book)
        return Response(serializer.data)

    def read(self,request,pk):
        book = self.get_object()
        book.bread = request.data.get('bread')
        book.save()
        serializer = self.serializer_class(book)
        return Response(serializer.data)

增加其他路由则在方法上面使用装饰器,路由才能自动识别
装饰器位置
from rest_framework.decorators import action
@action(methods=['get'],detail=True)
methods是指方法,detail指的是列表还是

使用装饰器后router会自动导入,无需修改任何东西

from rest_framework.routers import DefaultRouter,SimpleRouter
DefaultRouter,SimpleRouter唯一区别DefaultRouter会生成根目录

posted @   starSgz  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示