4.drf-版本管理
根据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-版本管理的更多相关文章
- 第 13 篇:DRF 框架之 API 版本管理
作者:HelloGitHub-追梦人物 API 不可能一成不变,无论是新增或者删除已有 API,都会对调用它的客户端产生影响.如果对 API 的增删没有管理,随着 API 的增增减减,调用它的客户端就 ...
- python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)
昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...
- DRF的版本、认证、权限
DRF的版本 版本控制是做什么用的, 我们为什么要用 首先我们要知道我们的版本是干嘛用的呢~~大家都知道我们开发项目是有多个版本的~~ 当我们项目越来越更新~版本就越来越多~~我们不可能新的版本出了~ ...
- Restful 1 -- REST、DRF(View源码解读、APIView源码解读)及框架实现
一.REST 1.什么是编程? 数据结构和算法的结合 2.什么是REST? - url用来唯一定位资源,http请求方式来区分用户行为 首先回顾我们曾经做过的图书管理系统,我们是这样设计url的,如下 ...
- drf
跨域同源 django做跨域同源 需要把csrf去掉 跨站请求伪造 同源 同源机制:域名.协议.端口号相同的同源 简单请求 不写头部请求 跨域会拦截报错缺少请求信息 (1) 请求方法是以下三种方法之一 ...
- linux系统下使用流行的版本管理工具 Git
前几天被版本管理困扰了好久,主要是因为 没法回到之前的版本,新版本又出了问题真的很尴尬. 终于决定使用目前网上很火的版本管理工具-------Git 历史啥的就不说了,说些有用的. 我用的是oschi ...
- 版本管理工具svn简介
svn简介 SVN是一种C/S架构的版本管理软件 , 能够帮助我们保存开发过程中各个文件的所有历史版本, 你因此可以方便的找回软件的任何一个历史状态., 日常开发中经常用到. 安装使用 1. 在 u ...
- Git 版本管理的简单理解
来源:百度知道 现在使用Git版本管理代码的项目非常多.但是Git本身是一条复杂的系统.我从几个简单的点来说明Git的基本功能.希望能帮助初学者快速入门. 工具/原料 Git code dot j ...
- GIT版本管理工具
原文:http://blog.csdn.net/ithomer/article/details/7527877 Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介 ...
- MacOS下Python的多版本管理(pyenv)
与windows下设置绝对路径不同,pyenv使用了一种更优雅的方式来管理Python的版本.pyenv通过在$PATH的最前面插入一个垫片路径(shims),例如:~/.pyenv/shims:/u ...
随机推荐
- UE 实现镜头平移,旋转和缩放
0x00 引 在数字孪生三维场景中,通过键盘和鼠标来控制镜头的移动,缩放是很常见的行为,也是很必要的行为,用户正是通过这些操作,达到对整个三维场景的观看和控制. 0x01 键盘控制镜头前后左右移动 通 ...
- 阿里云OSS存储前端API上传(签名上传)
一.创建用户 在阿里云创建用户https://ram.console.aliyun.com/users,并勾选Open API 保存好信息,很重要,返回后就再也找不到了 新增授权(这里视个人情况,需要 ...
- Kubernetes DevOps: Gitlab
Gitlab 官方提供了 Helm 的方式在 Kubernetes 集群中来快速安装,但是在使用的过程中发现 Helm 提供的 Chart 包中有很多其他额外的配置,所以我们这里使用自定义的方式来安装 ...
- Kubernetes 监控--Alertmanager
前面我们学习 Prometheus 的时候了解到 Prometheus 包含一个报警模块,就是我们的 AlertManager,Alertmanager 主要用于接收 Prometheus 发送的告警 ...
- MySQL学习(1)---MySQL概述
什么是数据库 概述 数据库(Database)是长期存储在计算机内有组织.大量.共享的数据集合.它可以供各种用户共享,具有最小冗余度和较高的数据独立性.数据库管理系统DBMS(Database Man ...
- 我公司是属于生产制造业,最近考虑实施ERP,生产制造业的ERP那家比较好?
直接告诉你用哪家ERP,那我就太不负责任了,不同企业的规模选用不同的系统,匹配很重要!比如你大型企业,业务管理都比较标准规范,变化性也不大,不差钱预算没问题(千万元起步),你可以考虑下头部厂商.但如果 ...
- 市面上erp软件那么多,为什么很多卖家选择定制erp?
为什么选择定制ERP?适合自己的才是最好的啊!就连头部ERP企业提供给用户的ERP系统,应该也没有不进行个性化定制的吧,匹配很重要!规模不同.行业不同.发展阶段不同.生产模式不同.管理理念不同,适用的 ...
- 一文读懂Apache Geode缓存中间件
目录 一.对缓存中间件的诉求 1.1 我们为什么需要缓存中间件 1.2 缓存的分类 1.1.1 弱势缓存 1.1.2 强势缓存 二.什么是Apache Geode 2.1 Apache Geode的架 ...
- 新零售SaaS架构:中央库存系统架构设计
近年来,越来越多的零售企业大力发展全渠道业务.在销售额增长上,通过线上的小程序.直播.平台渠道等方式,拓展流量变现渠道.在会员增长方面,通过多样的互动方式,全渠道触达消费者,扩大会员规模.而全渠道的库 ...
- VM运行centos网络配置(出现错误)详解
一般按照正常安装流程到这一步的时候可以直接点击网络和主机名,但是我这里并没有连接成功,因此我跳过了这里想着后面再配置 后面通过ping www.baidu.com以及ping 百度的ip地址(如何获得 ...