DRF的版本
版本控制是做什么用的, 我们为什么要用
首先我们要知道我们的版本是干嘛用的呢~~大家都知道我们开发项目是有多个版本的~~
当我们项目越来越更新~版本就越来越多~~我们不可能新的版本出了~以前旧的版本就不进行维护了~~~
那我们就需要对版本进行控制~~这个DRF也给我们提供了一些封装好的版本控制方法~~
版本控制怎么用
之前我们学视图的时候知道APIView,也知道APIView返回View中的view函数,然后调用的dispatch方法~
那我们现在看下dispatch方法~~看下它都做了什么~~
执行self.initial方法之前是各种赋值,包括request的重新封装赋值,下面是路由的分发,那我们看下这个方法都做了什么~~
我们可以看到,我们的version版本信息赋值给了 request.version 版本控制方案赋值给了 request.versioning_scheme~~
其实这个版本控制方案~就是我们配置的版本控制的类~~
也就是说,APIView通过这个方法初始化自己提供的组件~~
我们接下来看看框架提供了哪些版本的控制方法~~在rest_framework.versioning里~~
框架一共给我们提供了这几个版本控制的方法~~我们在这里只演示一个~~因为基本配置都是一样的~~
详细用法

1 REST_FRAMEWORK = { 2 # 默认使用的版本控制类 3 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning', 4 # 允许的版本 5 'ALLOWED_VERSIONS': ['v1', 'v2'], 6 # 版本使用的参数名称 7 'VERSION_PARAM': 'version', 8 # 默认使用的版本 9 'DEFAULT_VERSION': 'v1', 10 }

1 urlpatterns = [ 2 url(r"^versions", MyView.as_view()), 3 url(r"^(?P<version>[v1|v2]+)/test01", TestView.as_view()), 4 ]

1 class TestView(APIView): 2 def get(self, request, *args, **kwargs): 3 print(request.versioning_scheme) 4 ret = request.version 5 if ret == "v1": 6 return Response("版本v1的信息") 7 elif ret == "v2": 8 return Response("版本v2的信息") 9 else: 10 return Response("根本就匹配不到这个路由")