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方法 ...
随机推荐
- 关于JQUery.parseJSON()函数的知识札记
JSON数据也许大家都很陌生,而对我来讲属于半成品,由于项目问题,做web虽然用的是JSON数据格式传输,但是关于解析这一块还真不知道该注意什么,更不知道它是如何解析的,由于最近要把串口通信协议与此一 ...
- android内嵌H5页(webview)如何定位
一.切换至webview后再定位元素 (1)获取页面上下文 contexts = driver.contexts (2)切换至webview driver.switch_to.context(cont ...
- Pyinstaller打包scrapy
环境 Windows7 Python3.65 scrapy1.74 PyInstaller3.5 创建打包脚本 在与scrapy.cfg同路径创建start.py # -*- coding: utf- ...
- Python SQLAlchemy入门教程
本文将以Mysql举例,介绍sqlalchemy的基本用法.其中,Python版本为2.7,sqlalchemy版本为1.1.6. 一. 介绍 SQLAlchemy是Python中最有名的ORM工具. ...
- CSPS_104
又被爆踩. 正解写挂. 暴力不会. 只会改题. 还要加油. T1 $nlog^2$是显然的 那么考虑只二分一次,就$nlog$了! 有什么能通过一次二分$O(1)$得到呢? 二分a的位置,$O(1)$ ...
- 《吊打面试官》系列-Redis哨兵、持久化、主从、手撕LRU
你知道的越多,你不知道的越多 点赞再看,养成习惯 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联 ...
- 从壹开始【NetCore3.0】 46 ║ 授权认证:自定义返回格式
前言 哈喽大家好,马上就要年末了,距离新的一年,只有50天了,春节是75天. 在这个时节内,天气逐渐变凉,但是大家的心肯定很热吧,因为发生了两件大事: 1.双十一买买买,在这个让人激动又纠结的一天,大 ...
- Python实现群聊天小程序代码
群聊服务端 服务端Server.py代码如下: # -*- coding: utf-8 -*- #!/usr/bin/env python # @Time : 2018/5/18 16:05 # @D ...
- 原来JS是这样的 - 原型链
上一篇提到属性描述符 [[Get]] 和 [[Put]] 以及提到了访问描述符 [[Prototype]],看它们的特性就会很容易的让人想到经典的面向对象风格体系中对类操作要做的事情,但带一些 int ...
- [LC] 700题 Search in a Binary Search Tree (二叉搜索树中的搜索) (二叉搜索树)
①中文题目 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 NULL. 例如, 给定二叉搜索树: 在上述示例 ...