根据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. 搭建docker镜像仓库(一):使用registry搭建本地镜像仓库

    目录 一.系统环境 二.前言 三.使用registry搭建私有镜像仓库 3.1 环境介绍 3.2 k8smaster节点配置镜像仓库 3.3 k8sworker1节点配置从私有仓库上传和拉取镜像 3. ...

  2. [SDR] GNU Radio 系列教程(一) —— 什么是 GNU Radio

    目录 1.GNU Radio 是什么 2.我为什么要用 GNU Radio 3.数字信号处理 3.1 一点信号理论 3.2 将数字信号处理应用于无线电传输 4.基于流程图的模块化数字信号处理方法 本文 ...

  3. 从零教你使用MindStudio进行Pytorch离线推理全流程

    摘要:MindStudio的是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,该IDE上功能很多,涵盖面广,可以进行包括网络模型训练.移植.应用开发.推理运行及自定义算子开发等多种任务. 本 ...

  4. Helm安装ingress-nginx-4.2.3

    Application version 1.3.0 Chart version 4.2.3 获取chart包 helm fetch ingress-nginx/ingress-nginx --vers ...

  5. 【面试题】js实现将excel表格copy到页面

    js实现将excel表格copy到页面 点击打开视频讲解更加详细 其实最核心的技术,还是copy的是我们粘贴板上的数据 就像平常怎么粘贴复制其他的数据一样,只是我们在excel粘贴的是一个表格数据 这 ...

  6. KingbaseES R3 集群删除test库导致主备无法切换问题

    案例说明: 在KingbaseES R3集群中,kingbasecluster进程会通过test库访问,连接后台数据库服务测试:如果删除test数据库,导致后台数据库服务访问失败,在集群主备切换时,无 ...

  7. 这里聊聊扫地机的 IOT 开发

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16663833.html 消费者使用扫地机通常的方式是通过 ...

  8. LibTorch | 使用神经网络求解一维稳态对流扩散方程

    0. 写在前面 本文将使用基于LibTorch(PyTorch C++接口)的神经网络求解器,对一维稳态对流扩散方程进行求解.研究问题参考自教科书\(^{[1]}\)示例 8.3. 目录 0. 写在前 ...

  9. 在Ubuntu上安装Odoo时遇到的问题

    这两天开始看<Odoo快速入门与实践  Python开发ERP指南>(刘金亮 2019年5月第1版 机械工业出版社).试着在Ubuntu上安装Odoo,遇到很多问题,通过在网上查找,都已解 ...

  10. 使用Elasticsearch中的copy_to来提高搜索效率

    在今天的这个教程中,我们来着重讲解一下如何使用Elasticsearch中的copy来提高搜索的效率.比如在我们的搜索中,经常我们会遇到如下的文档: { "user" : &quo ...