DRF 之 版本控制
1、版本控制是干什么用的,为什么要有版本?
我们都知道每一个程序都是有版本的。而且版本也会升级从v1升级到v2、v3、v4·····,但是我们不可能因为新版本出现旧版本就不去维护,因为用户有权选择不更新版本。所以我们就需要对版本进行控制,这个DRF也给我们提供了一些封装好的方法。
2、在版本的源码中遨游
2.1 先看APIView中,有个initial方法

2.2 点击initial进入,我们可以看到将版本信息version 和 版本控制方案scheme 分别赋值给了request.version 和 request.determine_version.
self.determine_version 这个方法是找我们自己定义的版本控制类,没有的话就返回(None,None)

其实这个版本控制方案就是我们配置的版本控制的类,也就是说,APIView通过这个方法初始化了自己提供的组件
2.3 在rest_framework.versioning里查看版本控制类的方法。

3、具体用法
以URL上携带版本信息为例
3.1 第一步
先自定义一个版本控制类
class MyVersion(object):
def determine_version(self, request, *args, **kwargs):
version = request.query_params.get("version")
if not version:
version = 'v1'
return version
自定义一个版本控制类
3.2 第二部 在配置文件中注册
REST_FRAMEWORK = {
# 这个是默认使用的版本控制类
"DEFAULT_VERSIONING_CLASS": "utils.version.MyVersion", # 这个版本控制类的路径。
# 默认使用的的版本
'DEFAULT_VERSION': 'v1',
# 允许使用的版本
'ALLOWED_VERSIONS': ['v1','v2'],
# 版本使用的参数名称
'VERSION_PARAM': 'version'
}
配置seting.py
3.3 在url中写路由
# 这个urls 总urls中的
urlpatterns = [
url(r'^version/', include('Version_Demo.urls')) # 这里用了路由分发
]
# 这个urls是Version_Demo的app中的
urlpatterns = [
url(r'^demo/', Version_Demo.as_view()),
]
urls.py
3.4 试图测试
class Version_Demo(APIView): # 要继承APIView ,因为version是在APIView中的
def get(self, request):
print(request.version)
if request.version == 'v2':
print(request.version)
return Response('这是v2版本')
return Response('这是v1版本')
试图测试
DRF 之 版本控制的更多相关文章
- DRF之版本控制、认证和权限组件
一.版本控制组件 1.为什么要使用版本控制 首先我们开发项目是有多个版本的当我们项目越来越更新,版本就越来越多,我们不可能新的版本出了,以前旧的版本就不进行维护了像bootstrap有2.3.4版本的 ...
- Django drf:版本控制、django的缓存
一.版本控制 二.django的缓存 一.版本控制 1.内置版本控制类 from rest_framework.versioning import QueryParameterVersioning,A ...
- Restful API学习Day4 - DRF版本控制和认证
参考文档: Django REST framework基础:版本控制 Django REST framework基础:认证.权限.限制 为什么要有版本? 某些客户端 使用低版本只维护不开发新功能 v1 ...
- drf版本控制 django缓存
drf的版本控制 内置的版本控制类 from rest_framework.versioning import QueryParameterVersioning,AcceptHeaderVersion ...
- Django REST framework基础:版本控制
DRF的版本控制 为什么需要版本控制 API 版本控制允许我们在不同的客户端之间更改行为(同一个接口的不同版本会返回不同的数据). DRF提供了许多不同的版本控制方案. 可能会有一些客户端因为某些原因 ...
- Django-RestfulFramework --- DRF
>> (1)RESTful api 规范 和 DRF 的基本介绍 >> (2)DRF 的 认证系统实现 >> (3)DRF 的 权限系统实现 >> (4 ...
- 【DRF权限】
目录 权限的详细用法 我们都听过权限,那么权限到底是做什么的呢. 我们都有博客,或者去一些论坛,一定知道管理员这个角色, 比如我们申请博客的时候,一定要向管理员申请,也就是说管理员会有一些特殊的权利, ...
- DRF 版本、认证、权限、限制、解析器和渲染器
目录 一.DRF之版本控制 为什么要有版本控制? DRF提供的版本控制方案 版本的使用 全局配置 局部配置(使用较少) 二.DRF之认证 内置的认证 步骤 三.DRF之权限 1.自定义一个权限类 2. ...
- DRF Django REST framework 之 路由器与版本控制组件(七)
路由器 一些Web框架提供了用于自动确定应如何将应用程序的URL映射到处理传入请求的逻辑的功能. 而DRF的路由器组件也提供了一种简单,快速且一致的方式将视图逻辑映射到一组URL上. 路由器组件的使用 ...
随机推荐
- 86. Spring Boot集成ActiveMQ【从零开始学Spring Boot】
在Spring Boot中集成ActiveMQ相对还是比较简单的,都不需要安装什么服务,默认使用内存的activeMQ,当然配合ActiveMQ Server会更好.在这里我们简单介绍怎么使用,本节主 ...
- [BZOJ1592] [Usaco2008 Feb]Making the Grade 路面修整(DP)
传送门 有个结论,每一个位置修改高度后的数,一定是原来在这个数列中出现过的数 因为最终结果要么不递增要么不递减, 不递增的话, 如果x1 >= x2那么不用动,如果x1 < x2,把x1变 ...
- BZOJ 3750: [POI2015]Pieczęć 【模拟】
Description 一张n*m的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色. 你有一个a*b的印章,有些格子是凸起(会沾上墨水)的.你需要判断能否用这个印章印出纸上的图案.印的过程中需要 ...
- 刷题总结——小z的袜子(bzoj2038)
题目: Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把 ...
- linux命令dhclient
linux命令 dhclient 背景 多台服务器(CentOS7 系统)设置静态IP,其中有台服务器设置了静态IP后,只要重启就变更为其他的,但是配置文件并无改动. 使用命令 #自动获取IP dhc ...
- linux内核中预留4M以上大内存的方法
在内核中, kmalloc能够分配的最大连续内存为2的(MAX_ORDER-1)次方个page(参见alloc_pages函数, "if (unlikely(order >= ...
- Linux编译安装Apache+PHP
Linux编译安装Apache+PHP 来自:自学it网,http://www.zixue.it/. 1]编译安装Apache+PHP 1.安装程序依赖库和开发环境 为了省事把所需要的库文件全都安 ...
- 由String作为方法参数,引起的值传递,引用传递,及StringBuffer
原文引用: http://www.cnblogs.com/zuoxiaolong/p/lang1.html http://www.cnblogs.com/clara/archive/2011/09/1 ...
- git(二):一些简单入门命令
一.创建仓储(版本库) 可以创建在空目录下创建git仓库,也可以在已有项目里创建git仓储. $ mkdir NewName //仓储名 $ cd Newname //进入到该仓储目录中 $ git ...
- luogu P1260 工程规划
题目描述 造一幢大楼是一项艰巨的工程,它是由n个子任务构成的,给它们分别编号1,2,…,n(5≤n≤1000).由于对一些任务的起始条件有着严格的限制,所以每个任务的起始时间T1,T2,…,Tn并不是 ...