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. 第一阶段Sprint 对其他团队评价

    咱们的team 针对对“小学生网页四则运算”这个产品的评审,本人提出建议:1.第一阶段的产品Sprint不够好,无任务看板.无燃尽图.希望完善该产品的的Sprint,第二阶段的Sprint要认真写好. ...

  2. 【2018.11.8】小迟的比赛 / Yuno like cake / 格子填数

    题目 $noip$ 欢乐赛真是欢乐,除了不欢乐的方面以外我都很欢乐. T1 鸡汤题目,故意输对后面的胜率又没有影响,为什么要故意输呢? 所以第二个决策是凑字用的,这题就是朴素递推概率,最后乘结果权值计 ...

  3. Spoj-BGSHOOT

    The problem is about Mr.BG who is a great hunter. Today he has gone to a dense forest for hunting an ...

  4. 【HDOJ6223】Infinite Fraction Path(后缀数组,倍增)

    题意: 给一个长度为n的字符串s[0..n-1],但i的后继不再是i+1,而是(i*i+1)%n,求所有长度为n的“子串”中,字典序最大的是谁 n<=150000,s[i]=0..9 思路:后缀 ...

  5. Scrum软件开发

    Scrum 什么是Scrum Scrum是迭代式增量软件开发过程,通常用于敏捷软件开发.Scrum包括了一系列实践和预定义角色的过程骨架.Scrum中的主要角色包括同项目经理类似的Scrum主管角色负 ...

  6. SUPEROBJECT序列数据集为JSON

    // SUPEROBJECT 序列数据集 cxg 2017-1-12// {"data":[{"c1":1,"c2":1}]};// DEL ...

  7. WIP - 离散任务点击组件-错误:LOCATOR.CONTROL 的变元无效:ORG_LOCATOR_CONTROL=''

    Getting Error "Invalid Argument to LOCATOR.CONTROL: ORG_LOCATOR_CONTROL='' in Material Requirem ...

  8. 【postMan】发送post请求,返回错误码415

    解决方法: 参看:https://www.cnblogs.com/spec-dog/p/3731279.html 将Request的Content-Type:application/json;char ...

  9. Linux之时钟中断

    from:深入分析Linux内核源码(http://oss.org.cn/kernel-book/) 时钟中断的产生 Linux的OS时钟的物理产生原因是可编程定时/计数器产生的输出脉冲,这个脉冲送入 ...

  10. 【Linux学习笔记】栈与函数调用惯例

    栈与函数调用惯例(又称调用约定)— 基础篇 记得一年半前参加百度的校招面试时,被问到函数调用惯例的问题.当时只是懂个大概,比如常见函数调用约定类型及对应的参数入栈顺序等.最近看书过程中,重新回顾了这些 ...