进化写法GenericAPIView

面向对象的封装 将同样的 方法以及对象 封装到一起

  • 将 对数据库相关的 功能封装到一起 GenericAPIView

    from rest_framework.generics import GenericAPIView 中实现了这个类

    1. # 继承APIView
    2. class GenericView(APIView):
    3. ''' 继承这个类 重写 两个变量 queryset serializer_class '''
    4. # 定义要查询的 model对象 queryset
    5. queryset = None
    6. # 定义要使用的 序列化类
    7. serializer_class = None
    8. # 定义方法 重新查询 类变量 因为类变量有缓存的问题 重新查询保证 是最新的数据
    9. def get_queryset(self, *args, **kwargs):
    10. return self.queryset.all()
    11. # 定义获取 queryobj 的 方法 在对单条信息操作时使用
    12. def get_object(self, request, pk, *args, **kwargs):
    13. return self.get_queryset(*args, **kwargs).filter(pk=pk).first()
  • 增删改查查 对应的 关系

    • 新增: post: create
    • 删除: delete: destroy
    • 修改: put: update
    • 查所有: get: list
    • 查一条: get: retrieve
  • 注意:

    • 如果直接使用的 话 将方法的 名字改为 对应的 小写的请求
  1. # python mixin(混合类):不能单独使用,和其它类搭配起来使用(利用了Python支持多继承)
  2. class ListMixin(object):
  3. def list(self, request, *args, **kwargs):
  4. queryset = self.get_queryset()
  5. ser_obj = self.serializer_class(queryset, many=True)
  6. return Response(ser_obj.data)
  7. # 创建一条记录
  8. class CreateMixin(object):
  9. def create(self, request, *args, **kwargs):
  10. ser_obj = self.serializer_class(data=request.data)
  11. if ser_obj.is_valid():
  12. ser_obj.save()
  13. return Response("ok")
  14. else:
  15. return Response(ser_obj.errors)
  16. # 获取具体某一条记录
  17. class RetrieveMixin(object):
  18. def retrieve(self, request, pk, *args, **kwargs):
  19. obj = self.get_object(request, pk, *args, **kwargs)
  20. if obj:
  21. # 2. 将书籍对象 序列化成 json格式的数据
  22. ser_obj = self.serializer_class(obj)
  23. # 3. 返回响应
  24. return Response(ser_obj.data)
  25. else:
  26. return Response("无效的id")
  27. class UpdateMixin(object):
  28. def update(self, request, pk, *args, **kwargs):
  29. obj = self.get_object(request, pk, *args, **kwargs)
  30. if obj:
  31. ser_obj = self.serializer_class(instance=obj, data=request.data, partial=True) # form组件中也有类似的实现
  32. if ser_obj.is_valid():
  33. ser_obj.save()
  34. return Response(ser_obj.data)
  35. else:
  36. return Response(ser_obj.errors)
  37. else:
  38. return Response("无效的id")
  39. class DestroyMixin(object):
  40. def destroy(self, request, pk, *args, **kwargs):
  41. obj = self.get_object(request, pk, *args, **kwargs)
  42. if obj:
  43. obj.delete()
  44. return Response("删除成功")
  45. else:
  46. return Response("无效的id")

重写的 定义 方法 因为将方法名改了 django 在dispatch 方法 反射请求的 时候找不到对应的 方法 Generic

  1. # 重新定义一个 中间类 继承 需要的操作
  2. class ListCreateView(GenericView, ListMixin, CreateMixin):
  3. def get(self, request, *args, **kwargs):
  4. return self.list(request, *args, **kwargs)
  5. def post(self, request, *args, **kwargs):
  6. return self.create(request, *args, **kwargs)

可以通过 更改类的继承来调用对应的 方法

  • 视图中CBV 只需要重写两个类变量 并继承相应的类

    • 此写法 要使用原始的 方法名 原生请求 -->get /post/put/delete
    1. # 作者
    2. class AuthorListView(GenericView, ListMixin, CreateMixin):
    3. queryset = models.Author.objects.all()
    4. serializer_class = AuthorModelSerializer
    5. class AuthorDetailView(GenericView, RetrieveMixin, UpdateMixin, DestroyMixin):
    6. queryset = models.Author.objects.all()
    7. serializer_class = AuthorModelSerializer

**rest_framework 中有已经定义好的 工具类 直接继承 本篇用于 了解 DRF **

Django-rest-framework 接口实现 了解 GenericAPIView的更多相关文章

  1. day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能

    目录 1.web应用模式 2.API接口 3.Restful API规范 4.序列化 5.Django Rest Framework 1.drf的简单介绍 2.drf的特点 3.如何安装drf 4.d ...

  2. [Django REST framework - 自动生成接口文档、分页]

    [Django REST framework - 自动生成接口文档.分页] 自动生成接口文档 # 后端人员写好接口,编写接口文档,给前端人员看,前端人员依照接口文档开发 # 公司里主流 -后端,使用w ...

  3. 利用 Django REST framework 编写 RESTful API

    利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...

  4. Django Rest framework 之 认证

    django rest framework 官网 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest fra ...

  5. django rest framework restful 规范

    内容回顾: . django请求生命周期 -> 执行遵循wsgi协议的模块(socket服务端) -> 中间件(路由匹配) -> 视图函数(业务处理:ORM.模板渲染) -> ...

  6. Django Rest framework 之 视图

    RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...

  7. Django Rest Framework源码剖析(八)-----视图与路由

    一.简介 django rest framework 给我们带来了很多组件,除了认证.权限.序列化...其中一个重要组件就是视图,一般视图是和路由配合使用,这种方式给我们提供了更灵活的使用方法,对于使 ...

  8. Django Rest FrameWork 全部API

    Django Rest FrameWork .Requests 请求 客服端发送给服务器的请求 .Responses 响应 rest框架支持响应不同格式的内容 .Views 视图 base基础类视图 ...

  9. Django序列化&django REST framework

    第一章.Django序列化操作 1.django的view实现商品列表页(基于View类) # 通过json来序列化,但手写字典key代码量较大,容易出错:还有遇到时间,图片序列化会报错 from g ...

  10. DRF框架(django rest framework)

    1,DRF框架? Django REST framework 框架是一个用于构建Web API 的强大而又灵活的工具.通常简称为DRF框架 或 REST framework. Django REST ...

随机推荐

  1. MySQL事务(学习笔记)

    MySQL事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事 ...

  2. JavaScript开发工具大全

    译者按: 最全的JavaScript开发工具列表,总有一款适合你! 原文: THE ULTIMATE LIST OF JAVASCRIPT TOOLS 译者: Fundebug 为了保证可读性,本文采 ...

  3. 带你使用JS-SDK自定义微信分享效果

    前言 想必各位在写wap端时都遇到过这样的场景吧 ----自定义分享标题.图片.描述 接下来小编给大家讲解下分享相关操作 预期效果 原始的分享效果: 使用微信JS-SDK的分享效果: 可以看出缩略图, ...

  4. UOJ#310. 【UNR #2】黎明前的巧克力(FWT)

    题意 题目链接 Sol 挂一个讲的看起来比较好的链接 然鹅我最后一步还是没看懂qwq.. 坐等SovietPower大佬发博客 #include<bits/stdc++.h> using ...

  5. @Tranactional 注解分析

    Spring可以通过注解@Transactional来为业务逻辑层的方法(调用DAO完成持久化动作)添加事务能力,如下是@Transactional注解的定义 @Tranactional注解分析 作用 ...

  6. 在“非软件企业”开发软件的困局 ZT

    软件产品广泛服务于各行业,其开发具有高科技.高投入.高产出.高风险的特点.在项目开发和软件应用中,只有将人员能力的发挥与科学技术的使用应用市场的认识进行最佳的融合,才能发挥软件的效益.普通企业虽涉足软 ...

  7. ThreadLocal 类 的源码解析以及使用原理

    1.原理图说明 首先看这一张图,我们可以看出,每一个Thread类中都存在一个属性 ThreadLocalMap 成员,该成员是一个map数据结构,map中是一个Entry的数组,存在entry实体, ...

  8. Android为TV端助力 关于Fragment你所需知道的一切!

    转载自刘明渊 的博客地址:http://blog.csdn.net/vanpersie_9987 Fragment 是 Android API 中的一个类,它代表Activity中的一部分界面:您可以 ...

  9. leetcode-13罗马字符转整数

    leetcode-13罗马字符转整数 算法:转换的规律是先逐字符按照对应的阿拉伯数字累加,然后对于特殊的(I.X.C出现在左侧)要处理.处理方法:出现特殊字符组合减去双倍的左侧字符(在开始的处理中已经 ...

  10. java后台打开浏览器代码

    import java.awt.Desktop; import java.io.IOException; import java.net.URI; import java.net.URISyntaxE ...