Django-rest-framework 接口实现 版本控制 versioning
版本控制
rest_framework 提供了 5 种版本控制 以及对应的 写法 url的 更改都可以
在 from rest_framework import versioning 中查看
AcceptHeaderVersioning将版本信息放在请求头中URLPathVersioning将版本信息放在url路由中 ----常用NamespaceVersioning通过namespace 来区分版本HostNameVersioning通过主机名来区分版本QueryParameterVersioning通过URL参数来区分版本 ----常用
以URLpathVersioning 为例来定义
在 项目的 settings.py 中配置版本信息
REST_FRAMEWORK = {
...
# 使用那种版本控制来控制版本号
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
'DEFAULT_VERSION': 'v1', # 默认的版本
'ALLOWED_VERSIONS': ['v1', 'v2'], # 有效的版本
'VERSION_PARAM': 'version', # 版本的参数名与URL conf中一致
}
在url 路由中 做出对应的 修改
# 路由需要加上 (?P<version>[v1|v2]+)/ 的前缀 命名不能错 version 不然视图中无法获取到 版本号
urlpatterns = [
...
url(r'^(?P<version>[v1|v2]+)/publishers/$', views.PublisherView.as_view({'get': 'list', 'post': 'create'})),
url(r'^(?P<version>[v1|v2]+)/publishers/(?P<pk>\d+)/$', views.PublisherView.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})), ]
在视图中获取版本号
- 通过访问
request.version来获取当前请求的具体版本
from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView class PublisherView(ListCreateAPIView):
"""查看列表和创建"""
queryset = models.Publisher.objects.all()
serializer_class = PublisherModelSerializer def get_serializer_class(self):
"""不同的版本使用不同的序列化类"""
if self.request.version == 'v1': # 获取版本号
return PublisherModelSerializerVersion1
else:
return PublisherModelSerializer def get_queryset(self):
"""不同的版本返回不同的数据"""
if self.request.version == 'v1': # 获取版本号
return models.Publishr.objects.filter(id=4)
else:
return self.queryset
- 通过访问
局部配置版本信息
一般不使用
# 写在要对应的 视图中
versioning_class = URLPathVersioning
Django-rest-framework 接口实现 版本控制 versioning的更多相关文章
- Django REST framework中的版本控制
1.REST framework版本控制的流程分析 1.1 determine_version方法的执行流程 首先,请求到达REST framework的CBV,执行CBV中的dispatch方法再次 ...
- Django REST framework基础:版本控制
DRF的版本控制 为什么需要版本控制 API 版本控制允许我们在不同的客户端之间更改行为(同一个接口的不同版本会返回不同的数据). DRF提供了许多不同的版本控制方案. 可能会有一些客户端因为某些原因 ...
- Django REST framework - 版本控制
目录 Django REST framework 版本控制 为什么需要版本控制 DRF提供了5种版本控制方案 版本控制系统的使用 全局配置 局部配置 获取版本信息 Django REST framew ...
- day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能
目录 1.web应用模式 2.API接口 3.Restful API规范 4.序列化 5.Django Rest Framework 1.drf的简单介绍 2.drf的特点 3.如何安装drf 4.d ...
- [Django REST framework - 自动生成接口文档、分页]
[Django REST framework - 自动生成接口文档.分页] 自动生成接口文档 # 后端人员写好接口,编写接口文档,给前端人员看,前端人员依照接口文档开发 # 公司里主流 -后端,使用w ...
- django rest framework restful 规范
内容回顾: . django请求生命周期 -> 执行遵循wsgi协议的模块(socket服务端) -> 中间件(路由匹配) -> 视图函数(业务处理:ORM.模板渲染) -> ...
- Django REST framework反向生成url
Django REST framework是一个基于Django的框架,REST framework又是怎么反向生成url的呢?? 在前面的例子中,知道在REST framework中有6种版本控制的 ...
- Django Rest framework 之 版本
RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...
- python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)
昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...
随机推荐
- Linux日志 系统日志及分析
Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息. 大部分Linux发行版默认的日志守护进程为 syslog,位于 /etc/syslog 或 / ...
- Python初级面试语法<一>
可变对象与不可变对象 可变对象存的是地址,地址不变,但地址指向的值可以变(引用类型).类型:list.dict.set等 不可变对象直接存值,值变了,就是另一个对象了(值类型).int.float.t ...
- 详解MySQL基准测试和sysbench工具(转)
前言 作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的.本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法. 文章有疏漏之处, ...
- PHP 依赖注入和控制反转再谈(二)
今天有个朋友看到yii2中介绍的依赖注入一头雾水,之前我写过类似的文章发给他看了,可能还没深入理解吧,这里我再通俗点描述下依赖注入的原理吧,尽可能滴说通俗易懂一点吧:先还是扯下概念性滴问题(概念问题我 ...
- (一):C++分布式实时应用框架----整体介绍
C++分布式实时应用框架 (Cpp Distributed Real-time Application Framework) 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经 ...
- 协程与Epoll的配合
想快速了解协程与网络调用的原来么,那么请赶紧关闭本页,因为下面都是在扯淡. 这几天是端午假期,第一天大算照着网上一大堆基于ucontext来写协程的文章自己也写一个简单的协程实现.于是第一天我就开始动 ...
- WORLD 快速线
1,3个“-” 一条直线 2,3个“=” 一条双直线 3,3个“*” 一条虚线 4,3个“~” 一条波浪线 5, 3个“#” 一条隔行线
- JavaScript碎片—函数闭包(模拟面向对象)
经过这几天的博客浏览,让我见识大涨,其中有一篇让我感触犹深,JavaScript语言本身是没有面向对象的,但是那些大神们却深深的模拟出来了面向对象,让我震撼不已.本篇博客就是在此基础上加上自己的认知, ...
- Thinkphp5多数据库切换
在项目开发中需要Thinkphp5读取多个数据库的数据,本文详细介绍Thinkphp5多数据库切换 一.在database.php配置默认数据库连接 'type' => 'm ...
- Android 针对单个Activity设置状态栏颜色
代码如下: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//因为不是所有的系统都可以设置颜色的,在4.4以下就不可以. ...