GenericAPIView

1.视图层类使用GenericAPIView继承,能简化类里的方法code。

2.简化后的方法code格式基本通用,简单修改即可应用到其他类。

一、class开始加入

    queryset = Book.objectsserializer_class = BookModelSerializer

二、方法里获取对象

a.查询一个使用,如需要pk值查询

book = self.get_object()

b.查询多个,如获取所有对象

 book = self.get_queryset()

c.序列化方法使用self.get_serializer()

括号内原来是什么参数,就写什么参数,如

instance=book, data=request.data,

many=True

三、代码views.py

from app01.models import Book
from app01.ser import BookSerializer,BookModelSerializer
from rest_framework.response import Response
from rest_framework.generics import GenericAPIView
# 自己学的response
from app01.utils import MyResponse# 基于GenericAPIView
class BookView(GenericAPIView):queryset = Book.objectsserializer_class = BookModelSerializerdef get(self, request, pk):book = self.get_object()book_ser = self.get_serializer(book)return Response(book_ser.data)def put(self, request, pk):response = MyResponse()book = self.get_object()book_ser = self.get_serializer(instance=book, data=request.data)# 要数据验证if book_ser.is_valid():  # 返回True 表示验证通过book_ser.save()response.data = book_ser.dataelse:response.status= 101response.msg = '数据校验失败'response.data= book_ser.errorsreturn Response(response.get_dic)def delete(self, request, pk):ret = Book.objects.filter(pk=pk).delete()return Response({'status': 100, 'msg': '删除成功'})class BooksView(GenericAPIView):queryset = Book.objectsserializer_class = BookModelSerializer# 使用封装responsedef get(self, request):response=MyResponse()book = self.get_queryset()book_ser = self.get_serializer(book, many=True)  # 序列化多条。 如果一条,不需要写response.data = book_ser.datareturn Response(response.get_dic)# 新增def post(self, request):response=MyResponse()# 新增没有instance,只有databook_ser = self.get_serializer(data=request.data)# 如果没有data=,会报错。第一个参数是instance# book_ser = BookSerializer(request.data)# 校验字段if book_ser.is_valid():book_ser.save()response.data = book_ser.dataelse:response.status = 102response.msg = '新增数据校验失败'response.data = book_ser.datareturn Response(response.get_dic)

5个视图扩展类

分别如下,

ListModelMixin,CreateModelMixin,UpdateModelMixin,DestroyModelMixin,RetrieveModelMixin
from app01.models import Book
from rest_framework.mixins import ListModelMixin,CreateModelMixin,UpdateModelMixin,DestroyModelMixin,RetrieveModelMixin# 5个扩展类
class Books3View(GenericAPIView,ListModelMixin,CreateModelMixin):queryset = Book.objectsserializer_class = BookModelSerializerdef get(self,request):return self.list(request)def post(self,request):return self.create(request)class Book3DetailView(GenericAPIView,RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin):queryset = Book.objectsserializer_class = BookModelSerializerdef get(self,request,pk):return self.retrieve(request,pk)def put(self,request,pk):return self.update(request,pk)def delete(self,request,pk):return self.destroy(request,pk)

GenericAPIView的视图子类 9个

create,update等对应方法可以单独继承,也有组合的类继承,所以有9个。

# 基于 GenericAPIView的视图子类9个
from rest_framework.generics import CreateAPIView,ListAPIView,UpdateAPIView,RetrieveAPIView,DestroyAPIView,ListCreateAPIView,RetrieveUpdateAPIView,RetrieveDestroyAPIView,RetrieveUpdateDestroyAPIView# class Books4View(ListAPIView,CreateAPIView):
class Books4View(ListCreateAPIView):queryset = Book.objectsserializer_class = BookModelSerializer# class Book4DetailView(UpdateAPIView,RetrieveAPIView,DestroyAPIView):
class Book4DetailView(RetrieveUpdateDestroyAPIView):queryset = Book.objectsserializer_class = BookModelSerializer

ModelViewSet

简写成一个class,路由需要特别写法。

urls.py

  path('books5/', views.Books5View.as_view(actions={'get':'list','post':'create'})),re_path('^books5/(?P<pk>\d+)', views.Books5View.as_view(actions={'get':'retrieve','put':'update','delete':'destroy'})),

views.py

# 使用ModelViewSet编写5个接口
from rest_framework.viewsets import ModelViewSet
class Books5View(ModelViewSet):queryset = Book.objectsserializer_class = BookModelSerializer

使用ViewSetMixin 自定义方法名字

path('books6/', views.Books6View.as_view(actions={'get': 'get_all_book'})),
# 使用ViewSetMixin 自定义方法名字
from rest_framework.viewsets import ViewSetMixin# ViewSetMixin一定放在前面,重写as_view方法
class Books6View(ViewSetMixin,GenericAPIView):def get_all_book(self,request):books = Book.objects.all()book_ser = BookSerializer(books, many=True)return Response(book_ser.data)

rest_framework05:GenericAPIView用法/扩展类5个/子类9个/ViewSetMixin 自定义方法名字相关推荐

  1. drf之day05: 2个视图基类,GenericAPIView的属性和方法,基于APIView写5个接口,基于GenericAPIView写5个接口,5个视图扩展类,9个视图子类,视图集

    目录标题 一:2个视图基类 1.GenericAPIView的属性和方法 二:基于APIView写5个接口 三:基于GenericAPIView写5个接口 四:五个视图扩展类 1..基于Generic ...

  2. python定义一个类和子类_Python面向对象class类属性及子类用法分析

    本文实例讲述了Python面向对象class类属性及子类用法.分享给大家供大家参考,具体如下: class类属性 class Foo(object): x=1.5 foo=Foo() print fo ...

  3. Thinkphp编辑器扩展类kindeditor用法

    一, 使用前的准备. 使用前请确认你已经建立好了一个Thinkphp站点项目. 1,Keditor.class.php和JSON.class.php 是编辑器扩展类文件,将他们拷贝到你的站点项目的Th ...

  4. python类继承实例_python类继承与子类实例初始化用法分析

    这篇文章主要介绍了python类继承与子类实例初始化用法,实例分析了Python类的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 [ 先贴参考书籍原文(中文英文对照)] __init__方法介 ...

  5. jango-简单的mixin扩展类

    介绍 关于mixin,mix in是一种提供基础口味的冰淇淋(如香草,巧克力),可以往上添加坚果,饼干等.mixin作为扩展类通常用于多继承问题.多继承是Python语言的特色.一般通过继承或重写来使 ...

  6. objective-c中Category类别(扩展类)专题总结

    objective-c中Category类别(扩展类)专题总结 objective-c中Category 类别.扩展 专题总结 http://blog.csdn.net/jiajiayouba/art ...

  7. java中 如果类c_Java中,如果类C是类B的子类,类B是类A的子类,那么下面描述正确的是( )。_学小易找答案...

    [单选题]社会意识是() [判断题]刘易斯认为,在发展中国家,经济发展应当追求最高精尖的技术.( ) [单选题]财务杠杆反映的是 [判断题]是否承认社会历史的规律性,是唯物史观和唯心史观的根本对立. ...

  8. 阅读micropyton源码-添加C扩展类模块(2)

    阅读micropyton源码-添加C扩展类模块(2) 苏勇,2021年8月 文章目录 阅读micropyton源码-添加C扩展类模块(2) 看看machine_pin_type实例的定义 特别说明 看 ...

  9. 实现不可变类如何禁止子类化?

    实现不可变类时要求禁止子类化.本文先讲禁止子类化的方式,最后解释为什么要禁止子类化. 如何禁止子类化 常用姿势 最简单的手段是将类声明为final,如String.Integer等常用的值类.但这样缺 ...

最新文章

  1. 配置swagger2_Springboot(三十五)启用Swagger2
  2. 电子电路基础复习 —— 三极管
  3. htmlparser操作bean类提取html页面元素
  4. c语言infile和outfile用法,C语言文件读写基本操作DEMO
  5. HALCON示例程序find_pads.hdev通过fit_rectangle2_contour_xld绘制精准轮廓
  6. 手机号、姓名、邮箱等合法性验证方法
  7. 华为root工具_华为手机EMUI9 ROOT通用操作方法
  8. java bio例子_传统的BIO
  9. 2021大二实训part02
  10. 交通运输业面临视频监控存储挑战
  11. apache 网页301重定向、自定义400/403/404/500错误页面
  12. 阿里巴巴:如何从优秀员工,晋升为合格管理者?
  13. java砖头铺路面试题,Java基础知识面试题
  14. 正在更新office,应用程序无法正常启动
  15. 软件技术PHp试卷,2014-2015软件技术学院AJAX试卷A
  16. 西门子S7系列PLC与触摸屏模拟仿真(无需实物)
  17. HTML版权符号写法及美化
  18. undefind_undefined
  19. Android Studio 里sync下载慢,怎么办?
  20. 国家、广东省、深圳市的“智能机器人”扶持政策汇总

热门文章

  1. 关于jquery ajax发送以及php接受json数据的一点记录
  2. 如何用 Linq 进行多重 Orderby ?
  3. 技术分享|单元测试推广与实战-在全新的DDD架构上进行单元测试
  4. 微结构设计能力看国产CPU发展
  5. Delphi 26 岁
  6. 您好,dotnet tool
  7. VS也可以这样进行快捷安装
  8. [C#.NET 拾遗补漏]08:强大的LINQ
  9. Newtonsoft 六个超简单又实用的特性,值得一试 【下篇】
  10. 中国速度之二神山建设(4):全能运维,召之即来,来之即战 | IDCF DevOps案例研究...