django restframework ModelViewSet使用自定义方法,路由

2023-11-18

一.先看原码:

​​​​​​​class ModelViewSet(mixins.CreateModelMixin,
                   mixins.RetrieveModelMixin,
                   mixins.UpdateModelMixin,
                   mixins.DestroyModelMixin,
                   mixins.ListModelMixin,
                   GenericViewSet):
    """
    A viewset that provides default `create()`, `retrieve()`, `update()`,
    `partial_update()`, `destroy()` and `list()` actions.
    """
    pass

二.使用:

因为继承关系为ModelViewSet < GenericViewSet < GenericAPIView。

GenericAPIView内必须定义属性:queryset 和 serializer_class 

所以ModelViewSet 通常结合 ModelSerializer 使用

class ProjectTypeSerializer(serializers.ModelSerializer):
    """项目类型序列化器"""

    class Meta:
        model = ProjectType
        fields = '__all__'
from rest_framework.decorators import action

class ProjectTypeViewSet(ModelViewSet):
    #permission_classes = (IsAuthenticated,)
    queryset = ProjectType.objects.filter(is_delete=0).all().order_by('-id')
    serializer_class = ProjectTypeSerializer
    
    #自定义方法
    @action(methods=['get','post'], detail=False, url_path='user_action')
    def user_action(self,request, *args, **kwargs):
        dd = {"w":"ww","ee":"ttt"}
        return Response(dd)

三.路由配置:

from rest_framework.routers import DefaultRouter
from . import views

app_name = 'app1'
router = DefaultRouter()  # 可以处理视图的路由器

router.register(r'projects', views.ProjectTypeViewSet)

urlpatterns = [
    #url(r'^configyml/$', views.configYml),
]
urlpatterns += router.urls

四.访问:

 由于modelviewset也集成了mix相关类所以有get,post,delete, put相关对应的方法

请求  url 对应方法 备注
get 127.0.0.1:8000/projects/  list ListModelMixin
get 127.0.0.1:8000/projects/{1}/ retrieve ....Mixin
post 127.0.0.1:8000/projects/  create ....Mixin
put 127.0.0.1:8000/projects/{1}/ update ....Mixin
detete 127.0.0.1:8000/projects/{1}/ destroy ....Mixin
get 127.0.0.1:8000/projects/ useraction useraction 自定义
post 127.0.0.1:8000/projects/ useraction useraction 自定义

五.补充 @action中 detail=True 则表示对某个具体实例操作:

127.0.0.1:8000/projects/{id}/user_action

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django restframework ModelViewSet使用自定义方法,路由 的相关文章

随机推荐

  • 还是 “月饼” 后续,玩转炫彩 “月饼” 之 问题说明

    画一个 月饼 陪我过中秋 开发板后续问题跟进说明 目录 前言 一 出现问题 二 寻求办法 三 若有所思 四 问题测试 结语 悬赏送开发板 前言 本文有纯理论玩家是永远不会经历的实际问题 嵌入式工程师不动手永远出不了作品 本文最后有送开发板的
  • sqoop初步使用

    一 概述 Sqoop是一款开源的数据导入导出工具 可以将传统的关系型数据库导出至HDFS 也可以将HDFS中的数据导出至关系型数据库 官网 http sqoop apache org 原理 在Hadoop生态体系中 计算基本依赖于MR 那么
  • PHP如何使用Ds\Queue Capacity()函数?代码实例

    Ds Queue capacity PHP中的函数用于检查Queue实例的当前容量 语法 int public Ds PriorityQueue capacity void 参数 此功能不接受任何参数 返回值 此函数返回Queue实例的当前
  • stata学习笔记

    离散被解释变量 二值选择型 二值选择模型 多值选择型 多项选择模型 条件选择 混合 排序数据 排序模型 非负整数计数型 泊松 负二项 二值选择型 采用logit和probit模型 probit即把logit换一下就好 logit y x1
  • Dubbo源码分析-服务导出源码解析(三)

    在这个版本中dubbo会通过注解 PostConstruct把ServiceBean实例放到ConfigManager中 public abstract class AbstractConfig implements Serializabl
  • C++11 删除 字符串中的空格

    include
  • android 反射机制和反射调用方法

    对于android 中很多类没有开放出来 考虑到这些API不稳定 后续有可能会更改 所有没有在SDK中暴露出来给用户使用 但是我们在开放的过程中还是需要使用到一些android 系统中未开放出来的class 这时候我们就可以通过反射机制来调
  • 商品期货手续费一般是万分之十以内(商品期货手续费一般是万分之十以内吗)

    商品期货手续费一般 商品期货手续费普遍是极端之十以内 普遍是极端之10以内 简直看期货公司收取规范 普遍每个期货公司规范纷歧 海内四家期货买卖所颁布贬低一切期货买卖种类的手续费规范 各种类降费比率从12 5 到50 不等 期货买卖所手续费水
  • websocket的属性readyState

    websocket的属性readyState webSocket的readyState属性用来定义连接状态 该属性的值有下面几种 0 对应常量CONNECTING numeric value 0 正在建立连接连接 还没有完成 The con
  • MultipartFile上传文件报文件不存在的几种情况

    首先先了解一下从上传到保存整个流程是怎样的 然后在举几个文件不存在的例子 前端传进来一个文件 spring把文件保存到临时目录里 也就是 tmp tomcat 文件夹里 这个目录是在程序启动时创建的 目录也可以自定义 临时文件是 tmp结尾
  • matlab2019a中LSTM网络使用方法及源码示例(Deep Learning Toolbox系列篇6)

    此示例说明如何使用长短期记忆 LSTM 网络对序列数据进行分类 要训练深度神经网络以对序列数据进行分类 可以使用 LSTM 网络 LSTM 网络允许您将序列数据输入网络 并根据序列数据的各个时间步进行预测 此示例使用 1 和 2 中所述的日
  • 滑动指示器导航源码html+css

  • 深入理解react native布局(一)居中

    刚刚做完了一个项目 基本上把react native各种布局方式都用上了 发现了很多坑 也学会和很多 这里给大家分享一下哈 首先我们要有个概念 react native里面是兼容大部分我们在css里面用到的布局方式 此外接触过css里面fl
  • unity透明shader

    Shader Custom AlphaSelfIllum Properties Color Main Color Color 1 1 1 0 SpecColor Spec Color Color 1 1 1 1 Emission Emmis
  • Tab键== 4个空格并在Vim中的花括号后自动缩进

    我如何制作vi Vim从不使用制表符 将空格转换为制表符 不好 制作Tab键 4个空格 并在像Emacs这样的大括号块之后自动缩进代码 另外 如何保存这些设置 以便我再也不必输入它们 我已经看到了与此相关的其他问题 但它似乎总是与我想要的有
  • TypeScript学习笔记一:数据类型

    在TypeScript中所包含的数据类型有以下几种 number string boolean void Null 和 Undefined any array数组 Tuple元组 never enum object bight与symbol
  • os.mkdir()与os.makedirs()的异同及出现FileNotFoundError: [WinError 3] 系统找不到指定的路径。

    目录 一 问题分析 二 makedirs 和 mkdir 的不同 FileNotFoundError WinError 3 系统找不到指定的路径 一 问题分析 1 在使用 os mkdir 时 有时候报错系统会找不到指定路径 例如 我的工作
  • TCP 拥塞控制算法

    转自 https mp weixin qq com s NIFandX8w Cynnbl f2Lwg 拥塞 路由器因无法处理高速到达的流量而被迫丢弃数据信息的现象称为拥塞 为什么有了流量控制 还需要拥塞控制 流控只简单地表明了接收方的处理能
  • 最全的Java笔试题库之选择题篇-总共234道【181~234】

    181 下列没有直接采用XML技术的是 A UDDI B SOAP C AJAX D DCOM 解答 D DCOM 分布式组件对象模型 分布式组件对象模式 是一系列微软的概念和程序接口 利用这个接口 客户端程序对象能够请求来自网络中另一台计
  • django restframework ModelViewSet使用自定义方法,路由

    一 先看原码 class ModelViewSet mixins CreateModelMixin mixins RetrieveModelMixin mixins UpdateModelMixin mixins DestroyModelM