一、混合类(mixins)
使用基于类的视图,最大的优势之一就创建可复用的代码
我们编写的非常类似的代码,可以抽象出来,将这部分代码放到mixin类系列中,然后作为父类提供子类继承使用
from rest_framework import mixins # 导入

二、使用mixins
from rest_framework import mixins # 导入mixins类
from rest_framework import generics # 导入generics类 # 定义类视图 继承需要使用的mixnis类的方法
# 继承generics.GenericAPIView 视图方法
class SnippetList(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView):
queryset = Snippet.objects.all() # 指定要查询的集合
serializer_class = SnippetSerizlizer # 指定要使用的序列化器
#queryset 和 serializer_class 是继承的generics.GenericAPIView的类属性 # 定义get方法
def get(self, request, *args, **kwargs):
# 使用ListModelMixin 的list方法 将数据自动转换格式处理返回
return self.list(request, *args, **kwargs) # 定义post方法
def post(self, request, *args, **kwargs):
# 使用CreateModelMixin的create方法
return self.create(request, *args, **kwargs) class SnippetListDetail(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin,generics.GenericAPIView):
queryset = Snippet.objects.all() # 指定要查询的集合
serializer_class = SnippetSerizlizer def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs) def put(self,request,*args,**kwargs):
return self.update(request, *args, **kwargs) def delete(self,request, *args, **kwargs):
return self.delete(request, *args, **kwargs)
三、使用通用的基于类的视图
通过使用mixin类,我们使用更少的代码重写了这些视图,但我们还可以再进一步,rest框架提供了一组已经混合好的(mixed-in)通用视图
类,我们可以使用它来简化我们的views.py
只需要继承generics模块中的现成的某个通用类视图,比如ListCreateAPIView,然后在类里定义queryset和serializer_class两个属性的值
# 继承generics.ListCreateAPIView
class SnippetList(generics.ListCreateAPIView):
# 定义queryset和serializer_class两个属性的值
queryset = Snippet.objects.all()
serializer_class = SnippetSerizlizer # 继承generics.RetrieveUpdateDestroyAPIView
class SnippetDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Snippet.objects.all()
serializer_class = SnippetSerizlizer '''
generics.ListCreateAPIView 源码继承了mixins.ListModelMixin,mixins.CreateModelMixin,GenericAPIView,封装了get和post方法 generics.RetrieveUpdateDestroyAPIView 源码继承了mixins.RetrieveModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin,GenericAPIView,封装了 get、put、delete、patch方法 所以我们只需要继承对应的类,然后定义queryset和serializer_class两个属性的值,剩下交给drf完成
'''
 

11.mixins混合类的更多相关文章

  1. Typescript Mixins(混合)

    除了惯例的面对对象的思想,另一种较流行的通过可复用组件创建类的方法是将简单的类混合到一起.你可能对这种混合的方式比较熟悉或对Scala语言的特性有理解,这种模式在JavaScript社区也有一定的人气 ...

  2. C++11中对类(class)新增的特性

    C++11中对类(class)新增的特性 default/delete 控制默认函数 在我们没有显式定义类的复制构造函数和赋值操作符的情况下,编译器会为我们生成默认的这两个函数: 默认的赋值函数以内存 ...

  3. js深入研究之扩展类,克隆对象,混合类(自定义的extend函数,clone函数,与augment函数)

    1.类扩展 /* EditInPlaceField类 */ /* 扩展函数 */ function extend(subClass, superClass) { var F = function() ...

  4. Android快速开发不可或缺的11个工具类

     Android快速开发不可或缺的11个工具类  :http://www.devst ore.cn/code/info/363.html

  5. c++11 可变参数模板类

    c++11 可变参数模板类 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #inc ...

  6. CLI/C++中混合类的使用【转】

    http://www.cppblog.com/mzty/archive/2007/12/24/39517.html CLI/C++中混合类的使用 一 混合类 所谓混合类是指CLI/C++中native ...

  7. 利用Mixins扩展类功能

    8.18 利用Mixins扩展类功能 - python3-cookbook 3.0.0 文档 https://python3-cookbook.readthedocs.io/zh_CN/latest/ ...

  8. C++ primer plus读书笔记——第11章 使用类

    第11章 使用类 1. 运算符重载是一种形式的C++多态. 2. 不要返回指向局部变量或临时对象的引用.函数执行完毕后,局部变量和临时对象将消失,引用将指向不存在的数据. 3. 运算符重载的格式如下: ...

  9. C++11 单例类实现

    单例类: (1) 单例类保证全局只有一个唯一的实例对象. (2) 单例类保证只有唯一的接口获取这唯一实例. 非线程安全的单例类举例: class CSingleton { public: ~CSing ...

随机推荐

  1. 一文搞懂EMAS Serverless小程序开发|电子书免费下载

    >> 快来免费下载|电子书<五天玩转 EMAS Serverless> << 点击免费下载 <五天玩转 EMAS Serverless> EMAS Se ...

  2. Live2d Widget

    写在最前 最早的时候看别人的博客很多都有一个可爱的看板娘,然后就找了教程给自己也整了一个.因为找到的教程都是稂莠不齐的,原作者自己说的也略显含糊(其实是我自己看不懂).总之秉承着一如既往的小白风格.把 ...

  3. mysql 重复执行创建表、新增字段脚本

    #bigint 可重复执行创建表脚本 1 Create Table If Not Exists `库名`.`表名`( 2 字段列表 3 ) ENGINE=InnoDB DEFAULT CHARSET= ...

  4. SpringMVC 04: SpringMVC中4种页面跳转方式

    转发和重定向的页面跳转方式 页面跳转方式,本质上只有2种方式:转发 + 重定向 但在SpringMVC的具体实现上,转发可以细分为:普通的页面转发 + 经由action方法的页面转发 重定向可以细分为 ...

  5. KingbaseES 格式化函数

    KingbaseES格式化函数提供一套有效的工具用于把各种数据类型(日期/时间.integer.floating point和numeric)转换成格式化的字符串以及反过来从格式化的字符串转换成指定的 ...

  6. JTS TopologyException 问题

    计算2个几何相交结果时候,报错了: val geometry = polygon.intersection(lineString) 日志如下 org.locationtech.jts.geom.Top ...

  7. 【读书笔记】C#高级编程 第二十四章 文件和注册表操作

    (一)文件和注册表 对于文件系统操作,相关的类几乎都在System.IO名称空间中,而注册表操作由System.Win32名称空间中的类来处理. (二)管理文件系统 System.MarshalByR ...

  8. Kubernetes实践技巧:集群升级k8s版本

    更新证书 使用 kubeadm 安装 kubernetes 集群非常方便,但是也有一个比较烦人的问题就是默认的证书有效期只有一年时间,所以需要考虑证书升级的问题,本文的演示集群版本为 v1.16.2 ...

  9. Solutions:Elastic SIEM - 适用于家庭和企业的安全防护 ( 四)

  10. Xorg+LXDE迁移到Xwayland(同时支持Waydroid和Wine)记录

    系统环境: Debian bullseye Display Manager:无 桌面环境:LXDE Xorg 为什么使用Xwayland Wayland+Xwayland可以很好的支持Wayland ...