DRF中的版本控制
一、为什么要有版本
某些客户端 使用低版本只维护不开发新功能 v1
主要的产品还要不断的更新迭代功能 v2
API 版本控制允许我们在不同的客户端之间更改行为(同一个接口的不同版本会返回不同的数据)。 DRF提供了许多不同的版本控制方案。
二、DRF提供的版本控制方案
DRF提供了五种版本控制方案,如下图:
三、DRF版本控制系统的使用
全局配置
以 URLPathVersioning 为例,还是在项目的settings.py中REST_FRAMEWORK配置项下配置:
REST_FRAMEWORK = {
# 配置默认使用的版本控制类
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
'DEFAULT_VERSION': 'v1', # 默认的版本
'ALLOWED_VERSIONS': ['v1', 'v2'], # 有效的版本
'VERSION_PARAM': 'version', # 版本的参数名与URL conf中一致
}
urls.py中
urlpatterns = [
...
url(r'^(?P<version>[v1|v2]+)/publishers/$', views.PublisherViewSet.as_view({'get': 'list', 'post': 'create'})),
url(r'^(?P<version>[v1|v2]+)/publishers/(?P<pk>\d+)/$', views.PublisherViewSet.as_view({ 'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})), ]
我们在视图中就可以通过访问 request.version 来获取当前请求的具体版本,然后根据不同的版本来返回不同的内容:
我们可以在视图中自定义具体的行为,下面以不同的版本返回不同的序列化类为例
class BookViewSet(ModelViewSet):
'''书籍'''
queryset = models.Book.objects.all()
serializer_class = BookModelserializer # 只要配置了版本在视图中就能通过 request.version 获得当前版本号
def get_serializer_class(self):
'''获取当前序列化类的方法'''
# 根据版本的不同返回不同的序列化类
print(self.request.version)
if self.request.version == 'v1':
return BookSerializerVersion1
return BookModelserializer
局部配置
注意,通常我们是不会单独给某个视图设置版本控制的,如果确实需要给单独的视图设置版本控制,你可以在视图中设置versioning_class属性,如下:
# 给单独的某个视图加版本控制(用的非常少)
class PublisherViewSet(ModelViewSet):
...
versioning_class = URLPathVersioning
DRF中的版本控制的更多相关文章
- Django REST framework中的版本控制
1.REST framework版本控制的流程分析 1.1 determine_version方法的执行流程 首先,请求到达REST framework的CBV,执行CBV中的dispatch方法再次 ...
- DRF中的序列化器
DRF中的序列化器详细应用 视图的功能:说白了就是接收前端请求,进行数据处理 (这里的处理包括:如果前端是GET请求,则构造查询集,将结果返回,这个过程为序列化:如果前端是POST请求,假如要对数 ...
- 在VS代码中使用版本控制
在VS代码中使用版本控制 Visual Studio Code集成了源代码控制,并包含了内置的Git支持.许多其他源代码控制提供程序可通过VS Code Marketplace上的扩展获得. Git历 ...
- 十一、IntelliJ IDEA 中的版本控制介绍(上)
咱们已经了解了很多关于 IntelliJ IDEA 的使用方法,至少可以独立的运用 IntelliJ IDEA 进行项目开发啦!但是一个人进行项目开发更趋向于理想化,更多的则是团队协同开发.这时,咱们 ...
- DRF 中 解决跨域 与 预检
DRF 中 解决跨域 与 预检 1 跨域 浏览器的同源策略: 对ajax请求进行阻拦 ps: 对href src属性 不限制 只有浏览器会阻止,requests模块不会存在跨域 (1)解决方案1 JS ...
- drf中的各种view,viewset
drf中的各种view,viewset Django REST framework里有各种各样的view,让我有点蒙,得好好捋一捋这关系. 视图的作用 Django用"视图"这个概 ...
- DRF中的视图集的使用
1.说明:DRF框架中的视图集: 在drf开发接口中,使用GenericAPIView和视图扩展类结合起来完成接口功能是一件很常见的事情,所以,drf的作者帮我们提前把 GenericAPIView ...
- drf中View和router的详解
Rest Framework 视图和路由 因为涉及到视图层面了,而且下面的例子会反复用到request.data,所以我决定带大家稍微看下源码,感兴趣的可以自己深入了解 无论是View还是APIVie ...
- 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 ...
随机推荐
- js 鼠标点击文本框 提示文字消失
onfocus="if(this.value==defaultValue) {this.value='';}" onblur="if(!value) {value=def ...
- Maven整合SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...
- MySQL复制错误 The slave I/O thread stopsbecause master and slave have equal MySQL server UUIDs; these UUIDs must bedifferent for replication to work 解析
在搭建Mysql主从复制时候,在执行完相关操作以后,通过命令查看是否主从复制成功的时候 show slave status\G; 在"Slave_SQL_Running_State" ...
- sftp put权限不够
报错如下: sftp> put play.zip ./ Uploading play.zip to /opt/library/./play.zip remote open("/opt/ ...
- 【总结整理】原创概念原创idea---摘自《结网》
假如你有一个原创想法,搜索引擎是否已有现成产品与自己的想法一致,如果有,研究他可以节省很多摸索的时间:若没有,那就是一个货真价实的原创idea: 第一类:受到现有产品的启发,将既有概念进行了转换. 第 ...
- 反射01 Class类的使用、动态加载类、类类型说明、获取类的信息
0 Java反射机制 反射(Reflection)是 Java 的高级特性之一,是框架实现的基础. 0.1 定义 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对 ...
- commons-X系列
1 commons-lang 1.1 ReflectionToStringBuilder 将对象进行字符串拼接 /* * Licensed to the Apache Software Foundat ...
- opennebule 创建cdrom数据发送
{","csrftoken":"b9b5026f1a92180b789971ed8e21d28b"}
- NanoPi2
https://item.taobao.com/item.htm?spm=a230r.1.14.9.Ijhc8S&id=526981593477&ns=1&abbucket=1 ...
- Django框架 之 Pagination分页实现
Django框架 之 Pagination分页实现 浏览目录 自定义分页 Django内置分页 一.自定义分页 1.基础版自定义分页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...