rest_framework.mixins

请求业务 的 5 种实现

​ mixin(混合类):不能单独使用,和其它类搭配起来使用(利用了Python支持多继承)

  • rest_framework.mixins imput 业务的 主要逻辑都在这里

    • CreateModelMixin 创建对象 post 请求
    • ListModelMixin 查询所有的对象 get请求
    • RetrieveModelMixin 查询一个对象 get请求
    • UpdateModelMixin 更改一个对象 put 请求
    • DestroyModelMixin 删除一个请求 delete 请求

rest_framework.generics 实际使用时 需要调用的类

实际操作时根据 相应的需求来查询并继承

​ 定义的类的 视图操作 上面实现了 orm 操作 GenericAPIView

​ 以及 增删改查查的 操作 分类 多种选项 根据实际情况分类继承

rest_framework.viewsets 没有实际的 操作 只是对类进行了 归类的继承 方便使用

  • rest_framework.viewsets`中还封装好了其他的方法 一次性继承

    • from rest_framework.viewsets import ReadOnlyModelViewSet
    • ReadOnlyModelViewSet 封住了 两个查询的 方法 以及视图配置
    • ModelViewSet 封装了 视图配置以及5 个方法 直接继承这一个方法 完成5中操作
  • 使用 ModelViewSet 合成的写法 就要

    • 对路由进行设置 actions={'get':'list' .....} 进行归类

      url(r'authors/$', views.AuthorViewSet.as_view(
      actions={'get': 'list', 'post': 'create'})),
      # 作者列表
      url(r'authors/(?P<pk>\d+)/$', views.AuthorViewSet.as_view(
      actions={'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),
      # 作者详情
    • 或者使用 集成的写法 只写一个路由

      from rest_framework.routers import urlpatterns
      
      router = DefaurtRouter()
      
      # 设置路由应对应的 视图
      router.register('authors', views.AuthorViewSet)
      router.register('books', views.BooksViewSet) # 将生成的 路由添加到 urlpatterns 中 默认路由
      urlpatterns += router.urls

简化写法

视图只需要写一个就可以完成相应的操作

视图中 注意在路由中也要做一些修改

分开的写法:

# 导入配置类
from rest_framework.viewsets import GenericViewSet # 分开写 可以通过继承方式来 实现某种功能 路有中也必须分开写
导入5 个 混合类 配合使用
from rest_framework.mixins import CreateModelMixin, ListModelMixin, UpdateModelMixin, DestroyModelMixin, \
RetrieveModelMixin # 有 get post 请求
class BooksList(GenericViewSet, CreateModelMixin, ListModelMixin):
queryset = models.Books.objects.all()
serializer_class = BooksModelSerializer # get put delete 请求
class BookDetail(GenericViewSet, UpdateModelMixin, DestroyModelMixin, RetrieveModelMixin):
queryset = models.Books.objects.all()
serializer_class = BooksModelSerializer

写成一个的 写法

from rest_framework.viewsets import ModelViewSet
# 导入rest_framework已经 封装好的 5 种请求类 以及配置类
# 直接继承 就可以 使用返回 5 中请求
class AuthorViewSet(ModelViewSet):
"""
list()
create()
retrieve()
update()
destroy()
"""
queryset = models.Author.objects.all()
serializer_class = AuthorModelSerializer

路由中

一定要写 actions={}的 参数 字典中的 key 对应小写的 请求方式 value 对应请求 应该执行的 方法

如果 忘了 可以在 rest_framework.viewsets 中 查看 具体 对应的 方法名字

url(r'authors/$', views.AuthorViewSet.as_view(actions={'get': 'list', 'post': 'create'})),  # 作者列表
url(r'authors/(?P<pk>\d+)/$', views.AuthorViewSet.as_view(
actions={'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})
), # 作者详情

路由也可以 写成一个 由系统自动分配路由 urlpatterns

from rest_framework.routers import urlpatterns

router = DefaurtRouter(
# 设置路由应对应的 视图
router.register('authors', views.AuthorViewSet)
router.register('books', views.BooksViewSet)
将生成的 路由添加到 urlpatterns 中 默认路由
urlpatterns += router.urls #####此方法 可以在路由中 使用 .json 直接获取json 数据
http://127.0.0.1:8000/books.json

从地址栏获取 ? 参数

request.query_params.get('category')

generics

使用 封装了 所有的 增删改查查 操作

  • from rest_framework import generics

    • 直接继承内部封装的方法

    • 不必在 路由中 写 actions={'get': 'list', 'post': 'create'} 来定义 具体的 对应操作

    • class ListAPIView(mixins.ListModelMixin,
      GenericAPIView):
      """
      Concrete view for listing a queryset.
      """
      def get(self, request, *args, **kwargs):
      return self.list(request, *args, **kwargs)
    • 类中已经定义好了 方法 调用对应的 Mixin 类中的 方法

    **只需要 定义 **

    •     queryset = models.Course.objects.all()
      serializer_class = CourseModelSerializer

Django-rest-framework 接口实现 rest_framework 中有已经定义好的 工具类 mixins generics viewsets的更多相关文章

  1. Django Rest framework 之 权限

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

  2. Django Rest framework 之 视图

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

  3. django rest framework 详解

    Django REST framework 是用于构建Web API 的强大而灵活的工具包. 我们可能想使用REST框架的一些原因: Web浏览API对于开发人员来说是一个巨大的可用性. 认证策略包括 ...

  4. Django REST framework完全入门

    Django REST framework 一个强大灵活的Django工具包,提供了便捷的 REST API 开发框架 我们用传统的django也可以实现REST风格的api,但是顶不住Django ...

  5. Django REST Framework 最佳实践

    Django REST framework 是一个强大且灵活的工具包,用以构建Web APIs. 为什么要使用REST framework? - 在线可视的API,对于赢得你的开发者们十分有用 - 验 ...

  6. Django REST framework - 视图

    目录 Django REST framework 视图GenericAPIView GenericAPIView 例子 属性 混入 具体视图类 自定义基类 Django REST framework ...

  7. Java实现单词自定义排序|集合类、工具类排序、comparable、comparator接口

    课题 针对单词进行排序,先按字母的长度排序,长者在前: 在长度相等的情况下,按字典降序排序. 例如,有单词序列"apple banana grape orange",排序后输出结果 ...

  8. 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 ...

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

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

随机推荐

  1. c# 解密微信encryptedData字段

    参考链接:https://www.cnblogs.com/jetz/p/6384809.html 我写了一个工具方法,直接照搬链接中的方法,还有一个工具类. public class Encrypt ...

  2. mybatis_04 resultType和resultMap区别

    resultType 使用resultType进行结果映射时,查询的列名和映射的pojo属性名完全一致,该列才能映射成功. 如果查询的列名和映射的pojo属性名全部不一致,则不会创建pojo对象: 如 ...

  3. 【Java每日一题】20170228

    20170227问题解析请点击今日问题下方的“[Java每日一题]20170228”查看(问题解析在公众号首发,公众号ID:weknow619) package Feb2017; import jav ...

  4. C#设计模式之九组合模式(Composite Pattern)【结构型】

    一.引言 今天我们要讲[结构型]设计模式的第四个模式,该模式是[组合模式],英文名称是:Composite Pattern.当我们谈到这个模式的时候,有一个物件和这个模式很像,也符合这个模式要表达的意 ...

  5. Python3 系列之 环境包管理神器 pipenv

    环境说明:Windows 10 build 17763 + Python 3.7.2 介绍 pipenv 是在 pip 与 virtualenv 基础上发展而来的,弥补了之前 virtualenv 通 ...

  6. Thinkphp5多数据库切换

    在项目开发中需要Thinkphp5读取多个数据库的数据,本文详细介绍Thinkphp5多数据库切换 一.在database.php配置默认数据库连接 'type'           => 'm ...

  7. VS2017 docker部署工具的使用

    **简要描述:** - VS2017的docker支持工具,支持对.Net Framework,.Net Core控制台或者Web应用,在docker中生成,调试,运行.对于.Net Framewor ...

  8. <自动化测试方案_1>第一章、为什么要做自动化测试?(Why)

    第一章.为什么要做自动化测试?(Why) 测试的产品分为:桌面程序(C/S).web应用(B/S) 我们的产品是B/S (一)迭代中省去人力测试非新增功能: 在项目中由于测试时间的限制,测试中只能实现 ...

  9. [Android][Framework] 添加系统服务

    新博客地址 http://wossoneri.github.io/2018/09/15/[Android][Framework]create-system-service/ 做系统开发,有时候需要自己 ...

  10. matlab练习程序(曲面拟合)

    这里用到的还是最小二乘方法,和上一次这篇文章原理差不多. 就是首先构造最小二乘函数,然后对每一个系数计算偏导,构造矩阵乘法形式,最后解方程组. 比如有一个二次曲面:z=ax^2+by^2+cxy+dx ...