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 之 版本控制的更多相关文章

  1. DRF之版本控制、认证和权限组件

    一.版本控制组件 1.为什么要使用版本控制 首先我们开发项目是有多个版本的当我们项目越来越更新,版本就越来越多,我们不可能新的版本出了,以前旧的版本就不进行维护了像bootstrap有2.3.4版本的 ...

  2. Django drf:版本控制、django的缓存

    一.版本控制 二.django的缓存 一.版本控制 1.内置版本控制类 from rest_framework.versioning import QueryParameterVersioning,A ...

  3. Restful API学习Day4 - DRF版本控制和认证

    参考文档: Django REST framework基础:版本控制 Django REST framework基础:认证.权限.限制 为什么要有版本? 某些客户端 使用低版本只维护不开发新功能 v1 ...

  4. drf版本控制 django缓存

    drf的版本控制 内置的版本控制类 from rest_framework.versioning import QueryParameterVersioning,AcceptHeaderVersion ...

  5. Django REST framework基础:版本控制

    DRF的版本控制 为什么需要版本控制 API 版本控制允许我们在不同的客户端之间更改行为(同一个接口的不同版本会返回不同的数据). DRF提供了许多不同的版本控制方案. 可能会有一些客户端因为某些原因 ...

  6. Django-RestfulFramework --- DRF

    >> (1)RESTful api 规范 和 DRF 的基本介绍 >> (2)DRF 的 认证系统实现 >> (3)DRF 的 权限系统实现 >> (4 ...

  7. 【DRF权限】

    目录 权限的详细用法 我们都听过权限,那么权限到底是做什么的呢. 我们都有博客,或者去一些论坛,一定知道管理员这个角色, 比如我们申请博客的时候,一定要向管理员申请,也就是说管理员会有一些特殊的权利, ...

  8. DRF 版本、认证、权限、限制、解析器和渲染器

    目录 一.DRF之版本控制 为什么要有版本控制? DRF提供的版本控制方案 版本的使用 全局配置 局部配置(使用较少) 二.DRF之认证 内置的认证 步骤 三.DRF之权限 1.自定义一个权限类 2. ...

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

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

随机推荐

  1. [uiautomator篇]recent

    def Recent(self): d = Device('9410519008004c22098b') displayWidth = int(d.info.get("displayWidt ...

  2. 【Luogu】P2953牛的数字游戏(博弈论)

    题目链接 自己乱搞……然后一遍AC啦! 思路从基本的必胜态和必败态开始分析.我们把减去最大数得到的数叫作Max,减去最小数得到的数叫作Min. 那么开始分析. 一.0是必败态. 这个没法解释.题目就这 ...

  3. BZOJ4726: [POI2017]Sabota?

    $n \leq 500000$的树,开始有一个点是坏的,如果一个子树中坏点比例(不包括根节点)超过x那这整棵子树就会变坏,问最坏情况下不超过$K$个坏点的情况下$x$最小是多少. 被坑成傻逼.. 可以 ...

  4. [Hihocoder 1289] 403 Forbidden (微软2016校园招聘4月在线笔试)

    传送门 #1289 : 403 Forbidden 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi runs a web server. Someti ...

  5. 安卓解析JSON文件

    安卓解析JSON文件 根据JOSN文件的格式,文件只有两种数据,一是对象数据,以 {}为分隔,二是数组,以[]分隔 以下介绍安卓如何解析一个JSON文件,该文件存放在assets目录下,即:asset ...

  6. docker-nginx-标记一下

    拉取nginx镜像 然后启动容器: docker run -p : --name mynginx -d -v $PWD/nginx.conf:/etc/nginx/conf.d/default.con ...

  7. SPOJ MIXTURES 区间dp

    Harry Potter has n mixtures in front of him, arranged in a row. Each mixture has one of 100 differen ...

  8. centos6安装debuginfo

    查看内核版本,查找对应的内核rpm文件 [root@localhost ~]#uname -rsp Linux 3.10.0-229.1.2.el7.x86_64 x86_64 去debuginfo. ...

  9. go使用时间作为种子生成随机数

    原文:http://blog.csdn.net/qq_15437667/article/details/50851159 --------------------------------------- ...

  10. 手游产品经理初探(八)CasinoStar玩家离开原因分析

    通过Delta DNA分析报告.综合我们的游戏进行思考,我总结了几条玩家流失的经验: 1.在有限的前60秒我们没有花足够的精力去吸引玩家.就是说我们要花大量的经历在玩家进入游戏的60秒的体验上(我的澳 ...