rest-framework之版本控制

本文目录

一 作用

用于版本的控制

二 内置的版本控制类

  1. from rest_framework.versioning import QueryParameterVersioning,AcceptHeaderVersioning,NamespaceVersioning,URLPathVersioning
  2.  
  3. #基于url的get传参方式:QueryParameterVersioning------>如:/users?version=v1
  4. #基于url的正则方式:URLPathVersioning------>/v1/users/
  5. #基于 accept 请求头方式:AcceptHeaderVersioning------>Accept: application/json; version=1.0
  6. #基于主机名方法:HostNameVersioning------>v1.example.com
  7. #基于django路由系统的namespace:NamespaceVersioning------>example.com/v1/users/

三 局部使用

  1. #在CBV类中加入
  2. versioning_class = URLPathVersioning

四 全局使用

  1. REST_FRAMEWORK = {
  2. 'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.QueryParameterVersioning',
  3. 'DEFAULT_VERSION': 'v1', # 默认版本(从request对象里取不到,显示的默认值)
  4. 'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本
  5. 'VERSION_PARAM': 'version' # URL中获取值的key
  6. }

五 示例

基于正则的方式:

  1. from django.conf.urls import url, include
  2. from web.views import TestView
  3.  
  4. urlpatterns = [
  5. url(r'^(?P<version>[v1|v2]+)/test/', TestView.as_view(), name='test'),
  6. ]

url

  1. from rest_framework.views import APIView
  2. from rest_framework.response import Response
  3. from rest_framework.versioning import URLPathVersioning
  4.  
  5. class TestView(APIView):
  6. versioning_class = URLPathVersioning
  7.  
  8. def get(self, request, *args, **kwargs):
  9. # 获取版本
  10. print(request.version)
  11. # 获取版本管理的类
  12. print(request.versioning_scheme)
  13.  
  14. # 反向生成URL
  15. reverse_url = request.versioning_scheme.reverse('test', request=request)
  16. print(reverse_url)
  17.  
  18. return Response('GET请求,响应内容')

views.py

  1. # 基于django内置,反向生成url
  2. from django.urls import reverse
  3. url2=reverse(viewname='ttt',kwargs={'version':'v2'})
  4. print(url2)

源码分析

  1. #执行determine_version,返回两个值,放到request对象里
  2. version, scheme = self.determine_version(request, *args, **kwargs)
  3. request.version, request.versioning_scheme = version, scheme
  4.  
  5. def determine_version(self, request, *args, **kwargs):
  6. #当配置上版本类之后,就会实例化
  7. if self.versioning_class is None:
  8. return (None, None)
  9. scheme = self.versioning_class()
  10. return (scheme.determine_version(request, *args, **kwargs), scheme)

rest-framework之版本控制的更多相关文章

  1. Django Rest Framework之版本控制

    基本代码结构 settings.py: REST_FRAMEWORK = { 'DEFAULT_VERSION': 'v1', # 默认版本 'ALLOWED_VERSIONS': ['v1', 'v ...

  2. 【C#版本详情回顾】C#3.0主要功能列表

    隐式类型的本地变量和数组 在与本地变量一起使用时,var 关键字指示编译器根据初始化语句右侧的表达式推断变量或数组元素的类型 对象初始值设定项 支持无需显式调用构造函数即可进行对象初始化 集合初始值设 ...

  3. windows类书的学习心得

    原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...

  4. Django REST framework中的版本控制

    1.REST framework版本控制的流程分析 1.1 determine_version方法的执行流程 首先,请求到达REST framework的CBV,执行CBV中的dispatch方法再次 ...

  5. Django rest framework 版本控制(源码分析)

    基于上述分析 #2.处理版本信息 处理认证信息 处理权限信息 对用户的访问频率进行限制 self.initial(request, *args, **kwargs) #2.1处理版本信息 #versi ...

  6. Django REST framework - 版本控制

    目录 Django REST framework 版本控制 为什么需要版本控制 DRF提供了5种版本控制方案 版本控制系统的使用 全局配置 局部配置 获取版本信息 Django REST framew ...

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

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

  8. 06 Django REST Framework 版本控制

    01-版本控制 对接口进行版本控制只是一种杀死已部署客户端的“礼貌”方式. - 罗伊菲尔丁. 1. API版本控制允许您更改不同客户端之间的行为.REST框架提供了许多不同的版本控制方案. 2. 版本 ...

  9. Restful framework【第十二篇】版本控制

    简单使用 -drf版本控制 -在setting中配置 'DEFAULT_VERSION': 'v1', # 默认版本(从request对象里取不到,显示的默认值) 'ALLOWED_VERSIONS' ...

  10. 基于Django的Rest Framework框架的版本控制

    本文目录 一 作用 二 内置的版本控制类 三 局部使用 四 全局使用 五 示例 源码分析 回到目录 一 作用 用于版本的控制 回到目录 二 内置的版本控制类 from rest_framework.v ...

随机推荐

  1. laravel composer 安装指定版本以及基本的配置

    1 安装指定的 laravel版本 以下的案例是安装5.2版本 composer create-project laravel/laravel=5.2.* --prefer-dist 2 配置 优化相 ...

  2. spring bean 的生命周期

    感谢博友,内容源于博友的文章 http://www.cnblogs.com/zrtqsk/p/3735273.html 通过了解spring的bean 的生命周期 ,再结合jdk的注解,继承sprin ...

  3. Android : android 8.0 audio 接口分析

    1.HIDL 的概念 HIDL 读作 hide-l,全称是 Hardware Interface Definition Language.它在 Android Project Treble 中被起草, ...

  4. Linux系统下yum源配置(Centos 6)

    1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentOS-Base ...

  5. Buffer与Cache区别 简要说明

    Buffer –  缓冲区 写 用户写入数据存储区域 解决写入冲突           CPU-Memoury-Disk Cache – 缓存区 读 用户读取缓存数据使用 临时存储 Disk-memo ...

  6. 自动化创建tornado项目

    tornado目录结构: index.py 入口文件 app app目录 |___ __init__.py 初始化脚本 |___ templates  模板目录 |        |___ index ...

  7. DevExpress WinForms使用教程:Data Grid - Find Panel模式

    [DevExpress WinForms v18.2下载] DevExpress WinForms用户都熟知,Data Grid是整个产品线的主要产品.在v18.2中添加了一些新的功能,例如之前教程中 ...

  8. Java基础-语法定义

    Java三个体系 Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Ja ...

  9. Problem(I) STL - 灵活的线性表

    Description 数组和链表是我们熟知的两种线性结构,但是它们不够灵活(不能同时实现直接插入.删除和访问操作),给你若干种操作,你能通过一种灵活的容器,实现它们的功能吗? 操作1:Build a ...

  10. Office 365 企业应用以及服务概览 分享记录

    博客地址:http://blog.csdn.net/FoxDave 分享时间: 2017年9月14日 分享地点: 部门内部 参与人数: 16人 分享内容: 讲解微软MVP项目计划的相关内容:讲解O ...