DRF的版本控制

为什么需要版本控制

API 版本控制允许我们在不同的客户端之间更改行为(同一个接口的不同版本会返回不同的数据)。 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 PublisherViewSet(ModelViewSet):

    def get_serializer_class(self):
"""不同的版本使用不同的序列化类"""
if self.request.version == 'v1':
return PublisherModelSerializerVersion1
else:
return PublisherModelSerializer
queryset = models.Publisher.objects.all()

局部配置

注意,通常我们是不会单独给某个视图设置版本控制的,如果你确实需要给单独的视图设置版本控制,你可以在视图中设置versioning_class属性,如下:

class PublisherViewSet(ModelViewSet):

    ...
versioning_class = URLPathVersioning

最新文章

  1. mysql基本命令(转)
  2. Activemq消息类型
  3. log4js
  4. C语言中malloc()和calloc()c函数用法
  5. Rotate List —— LeetCode
  6. Delphi 的接口机制——接口操作的编译器实现过程(2)
  7. 监控apache虚拟主机进程
  8. 【解决】/usr/bin/ld: cannot find -lc
  9. Facebook 添加点赞按钮
  10. 房上的猫:java基础知识部分知识点
  11. ubuntu14.04上面安装ia32-libs
  12. LeetCode算法题-Degree of an Array(Java实现)
  13. python--第十五天总结(jquery)
  14. falsk sqlalchemy 自关联创建评论回复数据库
  15. 对比cp和scp命令 将数据从一台linux服务器复制到另一台linux服务器
  16. html table 固定表头和列
  17. tp5 中使用自定义扩展类和函数
  18. RealtimeRendering III
  19. android 发送url带中文出现乱码怎么解决
  20. HDU 1285 经典拓扑排序入门题

热门文章

  1. solr之环境配置二
  2. Python爬虫入门教程 22-100 CSDN学院课程数据抓取
  3. Chapter 5 Blood Type——6
  4. 【ASP.NET Core快速入门】(五)命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options
  5. [十二]JavaIO之BufferedInputStream BufferedOutputStream
  6. java web 项目打包(war 包)并部署
  7. 初识TensorFlow
  8. DHTMLX 常用技术
  9. 用户在浏览器中输入一个url发生的奥秘
  10. VisualStudio移动开发(C#、VB.NET)Smobiler开发平台——ImageTabBar控件的使用方式