使用drf视图集时自定义action方法(代码片段)

chichung chichung     2023-01-17     362

关键词:

在我们用DRF视图集完成了查找全部部门,创建一个新的部门,查找一个部门,修改一个部门,删除一个部门的功能后,views.py的代码是这样子的:

class DepartmentViewSet(ModelViewSet):
    queryset = Department.objects.all()
    serializer_class = DepartmentSerializer

现在需要新增一个功能,查询最新成立的部门。

这时,我们就需要自定义action方法了。

新增功能后的代码如下:

class DepartmentViewSet(ModelViewSet):

    queryset = Department.objects.all()
    serializer_class = DepartmentSerializer

    def lastest(self,request):
        """查看最新成立的部门"""
        dep = Department.objects.latest("create_date")
        serializer = self.get_serializer(instance=dep)
        return Response(serializer.data)

 

但是,还有一个问题,在视图集的路由设置里,本来用了DRF提供的router快捷地完成了视图的设置。但是增加的这个自定义方法,因为他的特殊性,生成的url地址并没有它。那么应该怎么办呢?

这时就需要使用rest_framework.decorators.action装饰器给自定义的方法进行装饰,装饰后它就能自动生成了。

增加多一行代码,最后变成:

class DepartmentViewSet(ModelViewSet):

    queryset = Department.objects.all()
    serializer_class = DepartmentSerializer

    @action(methods=[get],detail=False)    # detail=False表示不需要匹配主键的正则,函数不需要传入主键就设为False
    def lastest(self,request):
        """查看最新成立的部门"""
        dep = Department.objects.latest("create_date")
        serializer = self.get_serializer(instance=dep)
        return Response(serializer.data)

注意action装饰器的使用!

drf之视图集(代码片段)

一、为什么要有视图集?我们使用drf提供的generics包可以很轻松的实现六大基础接口,但我们会发现群查和单查却无法共存。这是由于我们寄希望于继承generics.ListAPIView来实现群查,同时有希望继承generics.RetrieveAPIView来实现单查,... 查看详情

drf-路由组件(代码片段)

...手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息。RESTframework提供了两个routerSimpleRouterDefaultRouter1.1使用方法1)创建router对象,并注册视图集,例如fromrest_frameworkimportrouter 查看详情

drf-视图集路由系统action装饰器(代码片段)

1.9个视图扩展类1.两个视图基类:APIView、GenricAPIView2.5个视图扩展类:CreateModelMixin,UpdateModelMixin,RetrieveModelMixin,ListModelMixin,DestroyModelMixin3.9个视图子类:CreateAPIView,DestroyAPIView,ListAPIView,RetrieveAPIView,UpdateAPIView,ListCreateAPIView,RetrieveDestroyAPIVi... 查看详情

05drf路由组件(代码片段)

...手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息。RESTframework提供了两个routerSimpleRouterDefaultRouter1.1使用方法1)创建router对象,并注册视图集,例如fromrest_frameworkimportroutersrouter= 查看详情

drf中五大扩展类及视图集的介绍(代码片段)

五个扩展类(1)ListModelMixin列表视图扩展类,提供list(request,*args,**kwargs)方法快速实现列表视图,返回200状态码。该Mixin的list方法会对数据进行过滤和分页。源代码:classListModelMixin(object):"""Listaqueryset."""deflist(self,request,*args,**kwargs):... 查看详情

drf-路由

...手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息。RESTframework提供了两个routerSimpleRouterDefaultRouter2.1使用方法1)创建router对象,并注册视图集,例如fromrest_frameworkimportrouters?router 查看详情

视图集viewset(代码片段)

一、视图集ViewSet使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中:list()提供一组数据retrieve()提供单个数据create()创建数据update()保存数据destory()删除数据ViewSet视图集类不再实现get()、post()等方法,而是实现动作actio... 查看详情

pythondjangorest_framework框架视图集与路由routers详解(图文并茂版)(代码片段)

...代码实现ModelViewSet视图集ReadOnlyModelViewSet视图集路由Routers使用方法具体实现操作视图集中附加action的声明视图集ViewSet视图集继承自APIView与ViewSetMixin,作用也与APIView基本类似,提供了身份认证、权限校验、流量管理等ViewS... 查看详情

drf视图家族(代码片段)

...icAPIView的子类视图集:viewsets包下的类generics中GenericAPIView使用GenericAPIView基类(基本不会单独使用,了解即可,但是是高级视图类的依赖基础)1)GenericAPIView继承APIView,所有APIView子类写法在继承GenericAPIView时可以保持一致2)Gener... 查看详情

pythondjangorest_framework框架视图集与路由routers详解(图文并茂版)(代码片段)

...代码实现ModelViewSet视图集ReadOnlyModelViewSet视图集路由Routers使用方法具体实现操作视图集中附加action的声明视图集ViewSet视图集继承自APIView与ViewSetMixin,作用也与APIView基本类似,提供了身份认证、 查看详情

djangorest_framework框架——视图集viewset和modelviewset源码解析(代码片段)

...义方法名,例如list()、create()等,然后经过路由中使用http和这些视图方法名进行绑定调用2、ViewSetMixin源码ViewSet主要通过继承ViewSetMixin来实现在调用as_view()时传入字典“http请求”:“视图方法”的映射处理工作,... 查看详情

视图类与视图集的基本使用(代码片段)

视图类与视图集的使用一、视图类:View、APIView、GenericAPIViewView是Django提供的一个视图类,类的返回值需要用到HttpResponse、JSONResponse(一)、APIView继承自Django中定义的View,但和View有两个区别:返回数据用到的是drf框架中的Response对... 查看详情

教程6-视图集和路由器(代码片段)

视图集和路由器目录视图集和路由器重构以使用视图集明确地将ViewSet绑定到URL使用路由器视图与视图集之间的权衡REST框架包括用于处理ViewSet的抽象,这使得开发人员能够集中精力对API的状态和交互进行建模,并且将URL构造留给... 查看详情

drf框架之自定义action(代码片段)

一、自定义action使用action装饰器methods支持的请求方式,为一个列表,默认为[‘get‘]detail必传参数,要处理的是否是详情资源对象(即是否通过url路径获取主键)True表示需要传递主键id,使用通过URL获取的主键对应的数据对象Fal... 查看详情

drf入门规范(代码片段)

...化的过程,不仅如此,还提供丰富的类视图、扩展类、视图集来简化视图的编写工作。 查看详情

drf-路由和认证(代码片段)

drf-路由目录drf-路由1路由1.1路由router的使用1.2action的使用2认证2.1认证的写法2.2源码分析2.3认证组件的使用1路由针对视图集ViewSet,我们出来可以自己手动指明请求方式与执行函数间的对应关系,还可以使用Routers来快速实现路由... 查看详情

drf框架6视图集与路由组件(开发最常用最高级)三大认证原理rbac认证规则(代码片段)

准备工作models.pyfromdjango.dbimportmodels#基类:是抽象的(不会完成数据库迁移),目的是提供共有字段的classBaseModel(models.Model):is_delete=models.BooleanField(default=False)updated_time=models.DateTimeField(auto_now_add=True)classMeta:abstract=True#必须完成该配置... 查看详情

django-rest-framework---总结(代码片段)

...nericAPIView基类mixins视图工具集-辅助GenericAPIView工具视图视图集GenericAPIView与APIView最为两大继承视图的区别工具视图集路由组件(了解)认证规则演变图JWT工作原理drf-jwtdrf-jwt开发针对token操作三大认证源码分析认证组件权限组件... 查看详情