简介

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. Python之django自带的分页功能

    前端页面: <div class="col-sm-6"> <div class="dataTables_paginate paging_simple_n ...

  2. Python2图像文本识别

    原文地址:http://www.cnblogs.com/tanghuang/p/6380588.html 适用版本:python2以下 将图片中的数字通过 pytesseract.image_to_s ...

  3. Srv数据格式

    1.简介 类似msg文件, srv文件是用来描述服务( service数据类型的, service通信的数据格式定义在*.srv中. 它声明了一个服务, 包括请求(request)和响应( reply ...

  4. Spring源码分析(十二)FactoryBean的使用

    摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 一般情况下,Spring通过反射机制利用bean的class属性指定实现 ...

  5. bat设置windows计划任务

    设置定时任务 @echo off set NAME=dailybackup :: set DAY=MON,TUE,WED,THU,FRI,SAT,SUN set COMMAND=cscript.exe ...

  6. php数组 组合排列 笛卡尔积

    function Descartes() { $t = func_get_args(); if (func_num_args() == 1) { return call_user_func_array ...

  7. hadoop体系架构

    1.1          Hadoop 概念:hadoop是一个由Apache基金会所开发的分布式系统基础架构.是根据google发表的GFS(Google File System)论文产生过来的. ...

  8. eclipse-Debug调试操作

    去除所有断点(打开debug视图):(或者直接点击菜单栏的run也有对应的菜单) 常用快捷键:  F5    Step into 单步调试进入函数内部.  F6 Step over 单步调试不进入函数 ...

  9. sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取

    原文:sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取 在多人开发中最头疼的是人少事多没有时间进行codereview,本来功能都没时间写,哪有时间来开会细细来分析代码.软件能跑就行, ...

  10. 洛咕 P3645 [APIO2015]雅加达的摩天楼

    暴力连边可以每个bi向i+kdi连边权是k的边. 考虑这样的优化: 然后发现显然是不行的,因为可能还没有走到一个dog的建筑物就走了这个dog的边. 然后就有一个很妙的方法--建一个新的图,和原图分开 ...