简介

API版本控制可以用来在不同的客户端使用不同的行为。REST框架提供了大量不同的版本设计。 
版本控制是由传入的客户端请求决定的,并且可能基于请求URL,或者基于请求头。 
有许多有效的方法达到版本控制的目的。特别是为具有多个客户的长期系统工程进行设计时,没有版本控制的系统也是可以的。

REST框架的版本控制

当使用版本控制时,request.version属性(字符串)与客户端请求的版本一致。 
默认情况下,没有使用版本控制,request.version将会返回None 
1 基于不同版本进行不同的行为

1
2
3
4
def get_serializer_class(self):
    if self.request.version == 'v1':
        return AccountSerializerVersion1
    return AccountSerializer

2 改变URL

1
2
3
from rest_framework.reverse import reverse
 
reverse('bookings-list', request=request)

reverse函数将应用于转换任何请求版本的URL。 
- NamespacedVersioning:类似命名空间

1
2
'v1:bookings-list'
http://example.org/v1/bookings/.

3 QueryParameterVersioning:查询参数

1
http://example.org/bookings/?version=1.0

4 版本控制和超链接序列化器 
当使用超链接的序列化器和基于URL的版本控制方案时,确保将请求作为序列化器的上下文。

1
2
3
4
def get(self, request):
    queryset = Booking.objects.all()
    serializer = BookingsSerializer(queryset, many=True, context={'request': request})
    return Response({'all_bookings': serializer.data})

版本配置

全局配置

1. 添加配置
1
2
3
4
5
6
7
8
9
10
REST_FRAMEWORK = {
              
             ....
              
             'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',
             'ALLOWED_VERSIONS':['v1','v2'], # 允许的版本
             'VERSION_PARAM':'version'# 参数
             'DEFAULT_VERSION':'v1'# 默认版本
             ....
      }
2. 设置路由 
1
2
3
4
5
6
7
8
9
10
BeesCity/urls.py
             urlpatterns = [
                    #url(r'^admin/', admin.site.urls),
                    url(r'^api/(?P<version>\w+)/', include('api.urls')),
             ]
       
      api/urls.py
             urlpatterns = [
                    url(r'^course/$', course.CourseView.as_view()),
             ]
3. 传递版本信息
1
http://127.0.0.1:8000/api/v1/course/
4. 获取版本 
1
request.version 获取版本 

局部配置

除非明确设置,否则DEFAULT_VERSIONING_CLASS值为None.此例中request.version将会始终返回None 
您还可以在一个单独的视图上设置版本控制方案。通常,您不需要这样做,因为在全局范围内使用一个版本控制方案更有意义。如果您确实需要这样做,请使用versioning_class属性。

1
2
3
4
from rest_framework.versioning import QueryParameterVersioning
 
class Course(APIView):
    versioning_class = QueryParameterVersioning

  这个时候可以用过url传参的方式来传递版本信息,如:

1
http://127.0.0.1:8000/api/course/?version=1

参考or转发

https://www.cnblogs.com/fu-yong/p/9104435.html

Django_rest_framework_版本(待验证)的更多相关文章

  1. Dubbo -- 系统学习 笔记 -- 示例 -- 参数验证

    示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 参数验证 参数验证功能是基于JSR303实现的,用户只需标识JSR303标准的验证Annotation,并通过声明filter来 ...

  2. 常用验证正则:用户名、密码、邮箱、手机号、身份证(PHP和JavaScript)

    日常开发中,常常会用到一些简单常用的正则表达式,用于判断一些常见的情况 下边,就列出五种(验证用户名,密码强度,邮箱格式,手机号格式和身份证格式)常见的情况 分成PHP版本和JavaScript两个版 ...

  3. jQuery的validation插件(验证表单插件)

    更完整的参考:http://www.runoob.com/jquery/jquery-plugin-validate.html 验证隐藏字段的使用(验证通过后ajax提交表单):http://www. ...

  4. [Android Pro] git 打标签、推送tag到托管服务器、验证是否成功

    reference to : http://www.cnblogs.com/ShaYeBlog/p/5576601.html 我们常常在代码封板时,使用git 创建一个tag ,这样一个不可修改的历史 ...

  5. MongoDB用户验证和权限管理

    官方参考页面: https://docs.mongodb.com/v3.6/tutorial/enable-authentication/ https://docs.mongodb.com/v3.6/ ...

  6. Ubuntu下多个gcc版本之间的切换

    Ubuntu下多个gcc版本之间的切换 1.查看当前系统的gcc版本 gcc -v 会输出以下信息: Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO ...

  7. 菜鸟系列Fabric源码学习 — MVCC验证

    Fabric 1.4 源码分析 MVCC验证 读本节文档之前建议先查看[Fabric 1.4 源码分析 committer记账节点]章节. 1. MVCC简介 Multi-Version Concur ...

  8. 验证Kubernetes YAML的最佳实践和策略

    本文来自Rancher Labs Kubernetes工作负载最常见的定义是YAML格式的文件.使用YAML所面临的挑战之一是,它相当难以表达manifest文件之间的约束或关系. 如果你想检查所有部 ...

  9. phpstudy2016-2018漏洞验证

    影响版本 漏洞验证 查看目录下 php_xmlrpc.dll PHPTutorial\php\php-5.4.45\ext\php_xmlrpc.dll存在@eval(%s('%s'));即说明有后门 ...

随机推荐

  1. 初识Qt布局管理器

    Qt布局管理器的类有4种,它们分别为QHBoxLayout.QVBoxLayout.QGridLayout和QStackLayout.其中,QHBoxLayout实现水平布局,QVBoxLayout实 ...

  2. 【转】android SystemUI 流程分析

    android4 SystemUI 流程分析 什么是SystemUI? 对于Phone来说SystemUI指的是:StatusBar(状态栏).NavigationBar(导航栏).而对于Tablet ...

  3. Spring源码分析(五)获取Document

    摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 这一篇开始进行Document加载了,XmlBeanFactoryRea ...

  4. POJ 1080( LCS变形)

    题目链接: http://poj.org/problem?id=1080 Human Gene Functions Time Limit: 1000MS   Memory Limit: 10000K ...

  5. js 中实现aop

    http://fredrik.appelberg.me/2010/05/07/aop-js/ Aop = { // Apply around advice to all matching functi ...

  6. to improve sqlite performance

    INSERT is really slow - I can only do few dozen INSERTs per second http://www.sqlite.org/faq.html#q1 ...

  7. 从OEL5中启动简单的dns服务

    在OEL5中,有一个 dnsmasq,可以适合小型的实验性的dns设置. 如果可以看到类似如下的内容,说明dnsmasq已经设置好了. [root@dnssvr ~]# rpm -qa dnsmasq ...

  8. day1 UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 2490: illegal multibyte sequence 错误提示

    get方式得到网页的信息 #coding=utf-8 #pip install requests #直接get到网页的信息 import requests from bs4 import Beauti ...

  9. Gitlab+Jenkins学习之路(二)之gitlab部署

    1.安装依赖及gitlab [root@linux-node1 ~]# yum install -y curl policycoreutils openssh-server openssh-clien ...

  10. Openstack入门篇(十一)之neutron服务(控制节点)的部署与测试

    1.Neutron的介绍 Neutron 为整个 OpenStack 环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和 *** 等.Neutron 提供了一个灵活的框架,通过配置,无论是开 ...