根据RESTful规范,后端API中需要体现出版本,DRF中支持5种版本的设置,常见的三种如下

1. URL的GET中传递参数

  • 在视图类中定义

    from rest_framework.versioning import QueryParameterVersioning
    versioning_class = QueryParameterVersioning
  • 访问路由添加版本
    http://127.0.0.1:8000/api/users/?version=v1
  • 在视图函数中获取版本
    request.version
  • 其他配置
    REST_FRAMEWORK = {
    # 默认路由版本关键字为version,可以在此修改
    "VERSION_PARAM": "v",
    # 允许版本,否则报错
    "ALLOWED_VERSIONS": ["v1", "v2", "v3"],
    # 默认版本,路由没有添加版本,则使用默认版本
    "DEFAULT_VERSION": "v1",
    # 全局配置版本类,在视图类中就可以不定义了
    "DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.QueryParameterVersioning"
    }

      

源码解析

2.URL路径传递

  • 在视图类中定义

    from rest_framework.versioning import URLPathVersioning
    versioning_class = URLPathVersioning
  • 在访问路径中添加版本
    127.0.0.1:8000/api/v1/users/
  • 在视图函数中获取版本
    request.version
  • 其他配置
    REST_FRAMEWORK = {
    # 默认路由版本关键字为version,可以在此修改
    "VERSION_PARAM": "v",
    # 允许版本,否则报错
    "ALLOWED_VERSIONS": ["v1", "v2", "v3"],
    # 默认版本,路由没有添加版本,则使用默认版本
    "DEFAULT_VERSION": "v1",
    # 全局配置版本类,在视图类中就可以不定义了
    "DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning"
    }

源码流程同上

3. 请求头传递

  • 在视图类中定义

    from rest_framework.versioning import AcceptHeaderVersioning
    versioning_class = AcceptHeaderVersioning
  • 在请求Accept中添加版本
    127.0.0.1:8000/api/users/
    Accept:version=v1
  • 在视图函数中获取版本
    request.version
  • 其他配置
    REST_FRAMEWORK = {
    # 默认路由版本关键字为version,可以在此修改
    "VERSION_PARAM": "v",
    # 允许版本,否则报错
    "ALLOWED_VERSIONS": ["v1", "v2", "v3"],
    # 默认版本,路由没有添加版本,则使用默认版本
    "DEFAULT_VERSION": "v1",
    # 全局配置版本类,在视图类中就可以不定义了
    "DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning"
    }

源码解析同上

4.反向生成

在每个版本处理的类中还定义了reverse方法,他是用来反向生成URL并携带相关的的版本信息用的

4.drf-版本管理的更多相关文章

  1. 第 13 篇:DRF 框架之 API 版本管理

    作者:HelloGitHub-追梦人物 API 不可能一成不变,无论是新增或者删除已有 API,都会对调用它的客户端产生影响.如果对 API 的增删没有管理,随着 API 的增增减减,调用它的客户端就 ...

  2. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  3. DRF的版本、认证、权限

    DRF的版本 版本控制是做什么用的, 我们为什么要用 首先我们要知道我们的版本是干嘛用的呢~~大家都知道我们开发项目是有多个版本的~~ 当我们项目越来越更新~版本就越来越多~~我们不可能新的版本出了~ ...

  4. Restful 1 -- REST、DRF(View源码解读、APIView源码解读)及框架实现

    一.REST 1.什么是编程? 数据结构和算法的结合 2.什么是REST? - url用来唯一定位资源,http请求方式来区分用户行为 首先回顾我们曾经做过的图书管理系统,我们是这样设计url的,如下 ...

  5. drf

    跨域同源 django做跨域同源 需要把csrf去掉 跨站请求伪造 同源 同源机制:域名.协议.端口号相同的同源 简单请求 不写头部请求 跨域会拦截报错缺少请求信息 (1) 请求方法是以下三种方法之一 ...

  6. linux系统下使用流行的版本管理工具 Git

    前几天被版本管理困扰了好久,主要是因为 没法回到之前的版本,新版本又出了问题真的很尴尬. 终于决定使用目前网上很火的版本管理工具-------Git 历史啥的就不说了,说些有用的. 我用的是oschi ...

  7. 版本管理工具svn简介

    svn简介 SVN是一种C/S架构的版本管理软件 , 能够帮助我们保存开发过程中各个文件的所有历史版本, 你因此可以方便的找回软件的任何一个历史状态., 日常开发中经常用到. 安装使用 1.  在 u ...

  8. Git 版本管理的简单理解

    来源:百度知道 现在使用Git版本管理代码的项目非常多.但是Git本身是一条复杂的系统.我从几个简单的点来说明Git的基本功能.希望能帮助初学者快速入门. 工具/原料   Git code dot j ...

  9. GIT版本管理工具

    原文:http://blog.csdn.net/ithomer/article/details/7527877 Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介 ...

  10. MacOS下Python的多版本管理(pyenv)

    与windows下设置绝对路径不同,pyenv使用了一种更优雅的方式来管理Python的版本.pyenv通过在$PATH的最前面插入一个垫片路径(shims),例如:~/.pyenv/shims:/u ...

随机推荐

  1. Hadoop相关WebUI端口记录

    以下均为默认端口号,可根据配置文件修改:HDFS:50070yarn:8088Hive:10002HBase:60010Spark:8080Flink:8081Storm:8080

  2. KingbaseES V8R6集群管理运维案例之---repmgr standby switchover故障

    案例说明: 在KingbaseES V8R6集群备库执行"repmgr standby switchover"时,切换失败,并且在执行过程中,伴随着"repmr stan ...

  3. gin如何多次shoubind一个请求参数

    gin多次绑定请求参数 package main import ( "fmt" "net/http" "time" "github ...

  4. 【ACG】博主在专栏更新内容后,及时通知关注他的用户去阅读

    ​ 业务场景 当用户打开应用时,系统发送Push消息给用户,向用户推荐博主信息.用户关注博主后,将保存用户的订阅信息,当关注的博主更新内容时,向订阅的用户发送短信,提醒用户及时查看最新内容.从而持续增 ...

  5. Exchange备份和日志清除

    最近新部署Exchange 2019,虽然变化不大,但是也遇到了一些小问题.随着深入研究,就能发现一些以前被忽视的点.Exchange完成备份后,数据库日志并没有被清除,依然存在.https://ww ...

  6. 第五章:Admin管理后台 - 3:Admin文档生成器

    Django的admindocs应用可以从模型.视图.模板标签等地方获得文档内容. 一.概览 要激活admindocs,请按下面的步骤操作: 在INSTALLED_APPS内添加django.cont ...

  7. Kibana:如何让用户匿名访问 Kibana 中的 Dashboard

    文章转载自:https://elasticstack.blog.csdn.net/article/details/118152293 有一个很好的 Dashboard,我们想分析这个 Dashboar ...

  8. 示例:Ingress通过互联网访问应用

    Ingress Ingress 是 Kubernetes 的一种 API 对象,将集群内部的 Service 通过 HTTP/HTTPS 方式暴露到集群外部,并通过规则定义 HTTP/HTTPS 的路 ...

  9. cAdvisor容器监控规则

    其他说明参考host主机监控规则:https://www.cnblogs.com/sanduzxcvbnm/p/13589848.html 在prometheus主程序目录下的rules目录下新建do ...

  10. ERP是什么呢?

    ERP(Enterprise Resource Planning,企业资源计划)系统,是进行物质资源.资金资源和信息资源集成一体化管理的企业信息管理系统,ERP统领企业全局,为管理层服务,重心在于企业 ...