一、混合类(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完成
'''
 

最新文章

  1. C程序两则
  2. 【HDU】4418 Time travel
  3. SQL Server中DateTime与DateTime2的区别
  4. linux创建git远程仓库
  5. 【干货】国外程序员整理的 C++ 资源大全
  6. HDU2521反素数
  7. java commons-lang 工具包 逃脱工具 转unicode 及其他
  8. android listview 重用view导致的选择混乱问题
  9. 程序中非action获得spring容器
  10. Spring实战笔记2---Bean的装配
  11. 使用sed替换一行内多个括号内的值
  12. 【Android手机测试】linux内存管理 -- 一个进程占多少内存?四种计算方法:VSS/RSS/PSS/USS
  13. iptables概述
  14. SQL Server性能优化(11)非聚集索引的覆盖索引存储结构
  15. Asp.Net初学小结
  16. opencv学习笔记(三)
  17. python接口自动化测试十七:使用bs4框架进行简单的爬虫
  18. 树莓派3中没有/dev/video0的解决方法(使用OpenCV编程调用树莓派摄像头的方法)
  19. HTML常用标签大全
  20. iOS-Socket编程体验

热门文章

  1. 基于bert训练自己的分词系统
  2. 在 IconFont 上获取图标资源的操作方法与感悟
  3. CSP2021-S游记
  4. QFile 对文件进行读写操作
  5. CodeForces - 1690F
  6. SpringMVC 05: SpringMVC中携带数据的页面跳转
  7. format添加未知个参数方法
  8. rh358 003 ansible部署双网卡绑定 DNS原理 bind正向解析
  9. KingbaseES R6 集群修改ssh端口执行sys_backup.sh备份案例
  10. 【FAQ】接入华为应用内支付服务常见问题解答