Django_rest_framework_版本(待验证)
简介
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 reversereverse('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 QueryParameterVersioningclass 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_版本(待验证)的更多相关文章
- Dubbo -- 系统学习 笔记 -- 示例 -- 参数验证
示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 参数验证 参数验证功能是基于JSR303实现的,用户只需标识JSR303标准的验证Annotation,并通过声明filter来 ...
- 常用验证正则:用户名、密码、邮箱、手机号、身份证(PHP和JavaScript)
日常开发中,常常会用到一些简单常用的正则表达式,用于判断一些常见的情况 下边,就列出五种(验证用户名,密码强度,邮箱格式,手机号格式和身份证格式)常见的情况 分成PHP版本和JavaScript两个版 ...
- jQuery的validation插件(验证表单插件)
更完整的参考:http://www.runoob.com/jquery/jquery-plugin-validate.html 验证隐藏字段的使用(验证通过后ajax提交表单):http://www. ...
- [Android Pro] git 打标签、推送tag到托管服务器、验证是否成功
reference to : http://www.cnblogs.com/ShaYeBlog/p/5576601.html 我们常常在代码封板时,使用git 创建一个tag ,这样一个不可修改的历史 ...
- MongoDB用户验证和权限管理
官方参考页面: https://docs.mongodb.com/v3.6/tutorial/enable-authentication/ https://docs.mongodb.com/v3.6/ ...
- Ubuntu下多个gcc版本之间的切换
Ubuntu下多个gcc版本之间的切换 1.查看当前系统的gcc版本 gcc -v 会输出以下信息: Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO ...
- 菜鸟系列Fabric源码学习 — MVCC验证
Fabric 1.4 源码分析 MVCC验证 读本节文档之前建议先查看[Fabric 1.4 源码分析 committer记账节点]章节. 1. MVCC简介 Multi-Version Concur ...
- 验证Kubernetes YAML的最佳实践和策略
本文来自Rancher Labs Kubernetes工作负载最常见的定义是YAML格式的文件.使用YAML所面临的挑战之一是,它相当难以表达manifest文件之间的约束或关系. 如果你想检查所有部 ...
- phpstudy2016-2018漏洞验证
影响版本 漏洞验证 查看目录下 php_xmlrpc.dll PHPTutorial\php\php-5.4.45\ext\php_xmlrpc.dll存在@eval(%s('%s'));即说明有后门 ...
随机推荐
- 关于VS2010 C#使用DirectX的问题[英]
转载的,就不翻译了…微软把精力放到xna去了.所以推荐大家用XNA,如果非要用托管的DirectX也可以,只不过版本一直是2006年的了. 具体方法: 安装SDK之后 他默认的位置在C:\WINDOW ...
- 输入一批考生的的准考证号码,如果是 15 位,表示输入正确,否则重新输入。然后判断这个人的考试类别(号码中如果是以奇数结尾则考试类别为“A 类”,否则为“B 类”),最后输出此准考证的前 5 位和后 4 位,其他位用“*”来代替。说明:使用 StringBuffer 类的相关方法完成实验内容。
因为是一批考生,所以先创建一个字符数组存放一组准考证号. 此外这个程序涉及到包装类与基本数据类型的互相转换. string的substring方法,返回一个字符串是该字符串的子串.从第一个参数开始,第 ...
- Linux Shell常用技巧(三)
八. 流编辑器sed: sed一次处理一行文件并把输出送往屏幕.sed把当前处理的行存储在临时缓冲区中,称为模式空间(pattern space).一旦sed完成对模式空间中的行的处理,模式空间中的行 ...
- js 继承的几种方式
JS继承的实现方式: 既然要实现继承,那么首先我们得有一个父类,代码如下: function Animal(name) { // 属性 this.name = name || '小白'; // 实例方 ...
- js replace 全局替换
js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <script language="j ...
- Redis全方位讲解--主从复制
前言 前面介绍了redis持久化和容灾备份,这篇会介绍redis主从复制和redis持久化在主从复制中的一些应用.因为本人没有那么多服务器或机器,所以这里主要介绍下如何在docker容器中搭建主从复制 ...
- 【转】使用nginx搭建高可用,高并发的wcf集群
原文:http://www.cnblogs.com/huangxincheng/p/7707830.html 很多情况下基于wcf的复杂均衡都首选zookeeper,这样可以拥有更好的控制粒度,但zk ...
- Java基础加强——动态代理
代理模式: 为其他对象提供一种代理以控制对这个对象的访问. 代理模式主要分为两类: 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译.在程序运行前,代理类的.class文件就已经存在了. ...
- python基础学习1-随机验证码
import random i=random.randrange(65,90) #根据设置的范围生成随机数字 print(i) c=chr(i)#根据随机产生的数字 然后用chr生成对应ASCII 数 ...
- dos下edit编辑器的快捷命令一览
Home Move cursor to the beginning of the line currently on. End Move cursor to the end of the line c ...