DRF 之 版本控制
2024-09-02 03:13:04
1、版本控制是干什么用的,为什么要有版本?
我们都知道每一个程序都是有版本的。而且版本也会升级从v1升级到v2、v3、v4·····,但是我们不可能因为新版本出现旧版本就不去维护,因为用户有权选择不更新版本。所以我们就需要对版本进行控制,这个DRF也给我们提供了一些封装好的方法。
2、在版本的源码中遨游
2.1 先看APIView中,有个initial方法
2.2 点击initial进入,我们可以看到将版本信息version 和 版本控制方案scheme 分别赋值给了request.version 和 request.determine_version.
self.determine_version 这个方法是找我们自己定义的版本控制类,没有的话就返回(None,None)
其实这个版本控制方案就是我们配置的版本控制的类,也就是说,APIView通过这个方法初始化了自己提供的组件
2.3 在rest_framework.versioning里查看版本控制类的方法。
3、具体用法
以URL上携带版本信息为例
3.1 第一步
先自定义一个版本控制类
class MyVersion(object):
def determine_version(self, request, *args, **kwargs):
version = request.query_params.get("version")
if not version:
version = 'v1'
return version
自定义一个版本控制类
3.2 第二部 在配置文件中注册
REST_FRAMEWORK = {
# 这个是默认使用的版本控制类
"DEFAULT_VERSIONING_CLASS": "utils.version.MyVersion", # 这个版本控制类的路径。
# 默认使用的的版本
'DEFAULT_VERSION': 'v1',
# 允许使用的版本
'ALLOWED_VERSIONS': ['v1','v2'],
# 版本使用的参数名称
'VERSION_PARAM': 'version'
}
配置seting.py
3.3 在url中写路由
# 这个urls 总urls中的
urlpatterns = [
url(r'^version/', include('Version_Demo.urls')) # 这里用了路由分发
]
# 这个urls是Version_Demo的app中的
urlpatterns = [
url(r'^demo/', Version_Demo.as_view()),
]
urls.py
3.4 试图测试
class Version_Demo(APIView): # 要继承APIView ,因为version是在APIView中的
def get(self, request):
print(request.version)
if request.version == 'v2':
print(request.version)
return Response('这是v2版本')
return Response('这是v1版本')
试图测试
最新文章
- iOS 事件处理之UIResponder简介
- linux tar 解压文件时指定文件名
- Java位运算经典实例
- python 随笔(property &; __class__)
- linux优先级、性能监控指令
- StoreKit framework
- 十个最常见的Java字符串问题
- ContextLoaderListener作用详解(转)
- 年度酷工作---高级数据工程师(公司靠谱,技术强悍,产品牛叉,福利有干货) 关键词:7000万用户、五星级厨师、住房补助 - V2EX
- Android Monkey自己主动化測试
- ajax的介绍
- ORM框架SQLAlchemy与权限管理系统的数据库设计
- bzoj2005 NOI2010 方案统计
- python day09
- Python 练习——计算1-2+3-4...+99
- [Python] Python基础字符串
- 深入理解java虚拟机---对象的创建过程(八)
- 使用docker搭建redis主从模式
- Java ssl认证记录
- 牛X的规则引擎urule2
热门文章
- hdu2022
- CentOS7下安装Docker-Compose No module named 'requests.packages.urllib3'
- noip2017爆炸记——题解&;总结&;反省(普及组+提高组)
- java之线程池面试题
- 【bzoj1299】[LLH邀请赛]巧克力棒 博弈+模拟
- C++ 中头文件(.h)和源文件(.cc)的写法简述
- android开发里跳过的坑——camera调用setDisplayOrientation设置预览显示旋转无效
- 标准C程序设计七---16
- Java学习:一 开篇
- BZOJ——2096: [Poi2010]Pilots