DRF Django REST framework APIView(一)
什么是REST?
REST是一个标准,一种规范,遵循REST风格可以使开发的接口通用,便于调用者理解接口的作用。
使url更容易理解,让增删改清晰易懂,在前后端分离开发中按照这一规范能加快开发效率,减少不必要的讨论时间。
- GET: 获取特定资源(通过ID)或资源集合
- POST: 创建一个新资源
- PUT: 更新特定资源(通过ID)
- DELETE: 按ID删除特定资源
详情可见:https://baike.baidu.com/item/rest/6330506
可以理解为: URL唯一代表资源,HTTP请求方式来区分用户行为。
URL的设计规范:
GET: 127.0.0.1:9001/books/ 获取所有数据
GET: 127.0.0.1:9001/books/{id} 获取单条数据
POST: 127.0.0.1:9001/books/ 增加数据
DELETE: 127.0.0.1:9001/books/{id} 删除数据
PUT: 127.0.0.1:9001/books/{id} 修改数据 数据响应规范:
GET: 127.0.0.1:9001/books/ 返回[{}, {}, {}]
GET: 127.0.0.1:9001/books/{id} {} 单条数据
POST: 127.0.0.1:9001/books/ {} 添加成功的数据
DELETE: 127.0.0.1:9001/books/{id} "" 返回空
PUT: 127.0.0.1:9001/books/{id} {} 更新后完整的数据 错误处理:
{ "error": "message" }
DRF
DRF (Django REST framework)Django REST框架是用于构建Web API的工具, 是功能强大且灵活的工具包。
通常简称为DRF框架 或 REST framework。DRF框架是建立在Django框架基础之上,由Tom Christie大牛二次开发的开源项目。
DRF中有封装了十大组件,分别是序列化组件,视图组件,认证组件,权限组件,频率组件,解析器,分页器,响应器,url控制器,版本控制。这十大组件,能够很好的帮助开发人员提升开发效率。
可以用来实现前后端分离的项目

APIView
APIView 是DRF概念体系中最基本类视图,也是所有视图的基类,继承自Django的 View 父类。
APIView 与 View 的不同之处在于:
- 传入到视图方法中的是REST framework的 Request 对象,而不是Django的 HttpRequeset 对象;
- 视图方法可以返回REST framework的 Response 对象,视图会为响应数据设置 render 符合前端要求的格式;
- 任何 APIException 异常都会被捕获到,并且处理成合适的响应信息;
- 在进行 dispatch() 分发前,会对请求进行身份认证、权限检查、流量控制
支持定义的属性:
- authentication_classes 列表或元祖,身份认证类
- permissoin_classes 列表或元祖,权限检查类
- throttle_classes 列表或元祖,流量控制类
在 APIView 中仍以常规的类视图定义方法来实现 get() 、 post() 或者其他请求方式的方法。
APIView源码分析
1. 路由层调用 as_view() 方法

2. 由于视图类 LoginView 类没有 as_view() 方法,所以去父类APIView中找

执行View里的 as_view() 方法

3. as_view() 最终还是执行类 APIView 里的 dispatch() 方法。

4. 通过 initialize_request() 将原生 request 封装到 Request 中,依次执行 initial() 里面的认证,权限,概率组件

5. Request 类做了什么

把一些常用的方法重新封装了,如GET方法封装成了query_params,并伪装成属性。

6. 最后通过映射进行分发,并返回

DRF的关键就是重写了 dispatch 方法,在 dispatch 中对原生的 request 进行了封装,然后通过 initial() 方法来执行认证,权限,频率的控制。
DRF Django REST framework APIView(一)的更多相关文章
- 轻轻松松学会 DRF Django REST framework
据我了解,目前的IT行业的大部分后端开发,都是需要进行前后端分离的,而前后端分类必不可少的是rest 规范,以下是django rest framework的学习路径: DRF Django REST ...
- DRF Django REST framework 之 解析器(二)
引入 Django Rest framework帮助我们实现了处理application/json协议请求的数据,如果不使用DRF,直接从 request.body 里面拿到原始的客户端请求的字节数据 ...
- DRF (Django REST framework) 中的视图类
视图说明 1. 两个基类 1)APIView rest_framework.views.APIView APIView是REST framework提供的所有视图的基类,继承自Django的View父 ...
- DRF (Django REST framework) 中的Request 与 Response
DRF中的Request 与 Response 1. Request - REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST f ...
- DRF Django REST framework 之 序列化(三)
Django 原生 serializer (序列化) 导入模块 from django.core.serializers import serialize 获取queryset 对queryset进行 ...
- DRF Django REST framework 之 认证组件(五)
引言 很久很久以前,Web站点只是作为浏览服务器资源(数据)和其他资源的工具,甚少有什么用户交互之类的烦人的事情需要处理,所以,Web站点的开发这根本不关心什么人在什么时候访问了什么资源,不需要记录任 ...
- DRF Django REST framework 之 路由器与版本控制组件(七)
路由器 一些Web框架提供了用于自动确定应如何将应用程序的URL映射到处理传入请求的逻辑的功能. 而DRF的路由器组件也提供了一种简单,快速且一致的方式将视图逻辑映射到一组URL上. 路由器组件的使用 ...
- DRF (Django REST framework) 中的路由Routers
路由Routers 注意是:对于视图集ViewSet!!!我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息. REST frame ...
- DRF (Django REST framework) 中的视图扩展类
2. 五个扩展类 1)ListModelMixin 列表视图扩展类,提供list(request, *args, **kwargs)方法快速实现列表视图,返回200状态码. 该Mixin的list方法 ...
随机推荐
- Ubuntu 18.04 下安装pip3及pygame模块
1.Ubuntu下pip3的安装.升级.卸载 安装pip3 sudo apt-get install python3-pip 升级pip3 sudo pip3 install --upgrade pi ...
- 网络安全-主动信息收集篇第二章-二层网络扫描之Netdiscover
专用于二层发现 可用于无限和交换网络环境 主动和被动探测 主动模式:netdiscover –i 网卡名 –r IP/网络位 / netdiscover –l IPList.txt 被动 net ...
- 微服务SpringCloud之GateWay服务化和过滤器
Spring Cloud Gateway 提供了一种默认转发的能力,只要将 Spring Cloud Gateway 注册到服务中心,Spring Cloud Gateway 默认就会代理服务中心的所 ...
- 利用bootstrap3的分页样式和jq实现分页功能
1源码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- 如何用CSS实现中间自适应,两边定宽三栏布局
1.前言 用css实现“两边定宽,中间自适应的三栏布局”这个问题应该是在前端面试中被面试官提问到的高频问题了,一般当面试者写出一种实现方法之后,面试官还会问你还有没有别的方法,尽量多的写出几种实现方法 ...
- 网页文件打包成.exe可执行文件
网页文件不止可以通过浏览器打开,也可以通过打包程序打包成.exe桌面可执行程序,这样写的网页文件就可以像桌面应用一样打开了.方法如下: 工具:NW.js.Enigma Virtual Box.资源编辑 ...
- Java 8 Streams API 详解
流式编程作为Java 8的亮点之一,是继Java 5之后对集合的再一次升级,可以说Java 8几大特性中,Streams API 是作为Java 函数式的主角来设计的,夸张的说,有了Streams A ...
- 易初大数据 2019年11月10日 spss习题 王庆超
◆1.一个数据文件包含下列数据,5个家庭没有汽车(编码为0),20个家庭有一辆汽车(编码唯1),10个家庭拥有两辆汽车(编码为2)指出下列哪种统计量适用于描述该数据并计算出统计量的值.A A拥有汽车数 ...
- activmq点对点(简单写法)
开发环境 我们使用的是ActiveMQ 5.11.1 Release的Windows版,官网最新版是ActiveMQ 5.12.0 Release,大家可以自行下载,下载地址. 需要注意的是,开发时候 ...
- Apache服务安装及一些基本操作
注意:安装apache服务之前记得搭建yum仓库 1.安装apache服务,输入命令“yum install httpd” 安装成功后,会这样显示 2.需要对Apache服务进行启动,输入命令“sys ...