什么是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(一)的更多相关文章

  1. 轻轻松松学会 DRF Django REST framework

    据我了解,目前的IT行业的大部分后端开发,都是需要进行前后端分离的,而前后端分类必不可少的是rest 规范,以下是django rest framework的学习路径: DRF Django REST ...

  2. DRF Django REST framework 之 解析器(二)

    引入 Django Rest framework帮助我们实现了处理application/json协议请求的数据,如果不使用DRF,直接从 request.body 里面拿到原始的客户端请求的字节数据 ...

  3. DRF (Django REST framework) 中的视图类

    视图说明 1. 两个基类 1)APIView rest_framework.views.APIView APIView是REST framework提供的所有视图的基类,继承自Django的View父 ...

  4. DRF (Django REST framework) 中的Request 与 Response

    DRF中的Request 与 Response 1. Request - REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST f ...

  5. DRF Django REST framework 之 序列化(三)

    Django 原生 serializer (序列化) 导入模块 from django.core.serializers import serialize 获取queryset 对queryset进行 ...

  6. DRF Django REST framework 之 认证组件(五)

    引言 很久很久以前,Web站点只是作为浏览服务器资源(数据)和其他资源的工具,甚少有什么用户交互之类的烦人的事情需要处理,所以,Web站点的开发这根本不关心什么人在什么时候访问了什么资源,不需要记录任 ...

  7. DRF Django REST framework 之 路由器与版本控制组件(七)

    路由器 一些Web框架提供了用于自动确定应如何将应用程序的URL映射到处理传入请求的逻辑的功能. 而DRF的路由器组件也提供了一种简单,快速且一致的方式将视图逻辑映射到一组URL上. 路由器组件的使用 ...

  8. DRF (Django REST framework) 中的路由Routers

    路由Routers 注意是:对于视图集ViewSet!!!我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息. REST frame ...

  9. DRF (Django REST framework) 中的视图扩展类

    2. 五个扩展类 1)ListModelMixin 列表视图扩展类,提供list(request, *args, **kwargs)方法快速实现列表视图,返回200状态码. 该Mixin的list方法 ...

随机推荐

  1. NOIP模拟测试9

    又考崩了咕咕咕... T1:随    好题标记 前置芝士: 原根:质数P的原根g满足1<=rt<P,且rt的1次方,2次方…(P-1)次方在模P意义下可以取遍1到(P-1)的所有整数.   ...

  2. 通俗易懂了解Vue内置组件keep-alive内部原理

    1. 官方介绍及其用法 1.1 组件介绍 要想搞明白<keep-alive>组件的内部实现原理,首先我们得搞明白这个组件怎么用以及为什么要用它,关于<keep-alive>组件 ...

  3. P3106 [USACO14OPEN]GPS的决斗(最短路)

    化简:够简的了.....但是!翻译绝对有锅. 这个最短路是从n到每个点的单源最短路,也就是最短路径树. 那么,思路就很明确了.建两个图,然后跑两边SPFA,记录下最短路径. 然后,对于两点之间的边,如 ...

  4. 创建python的虚拟环境

    为什么需要虚拟环境?如果你现在用Django 1.10.x写了个网站,然后你的领导跟你说,之前有一个旧项目是用Django 0.9开发的,让你来维护,但是Django 1.10不再兼容Django 0 ...

  5. EXISTS的用法介绍

    比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID ...

  6. T-SQL, Part III: Check table's existance

    There are several approaches to achieve so. Just list out all approaches I have tried: Approach 1: s ...

  7. Chrome Extension 小试牛刀

    自从有了Chrome以后,就喜欢上了这个浏览器,从此IE 886了. 以前作爬虫,做登录,做数据采集,做数据处理等各种功能,后来H5出来后,出现了,除了Session/Cookie 出了Local S ...

  8. flink 流式处理中如何集成mybatis框架

    flink 中自身虽然实现了大量的connectors,如下图所示,也实现了jdbc的connector,可以通过jdbc 去操作数据库,但是flink-jdbc包中对数据库的操作是以ROW来操作并且 ...

  9. mui 底部导航栏的实现

    mui 底部导航栏的实现 <nav class="mui-bar mui-bar-tab"> <a id="display" class=&q ...

  10. nyoj 311-完全背包 (动态规划, 完全背包)

    311-完全背包 内存限制:64MB 时间限制:4000ms Special Judge: No accepted:5 submit:7 题目描述: 直接说题意,完全背包定义有N种物品和一个容量为V的 ...