版本
- url中通过GET传参
自定义的版本
1 | from django.http import HttpResponse |
- 使用内置的类
1 | from rest_framework.versioning import QueryParameterVersioning |
这3个只需要在配置文件中设置就可以
在url路径中传参(推荐使用)
1 | REST_FRAMEWORK = { |
1 | class UsersView(APIView): |
1 | urlpatterns = [ |
- 源码流程
- 返回版本是在封装request之后,认证和权限之前做的
- BaseVersioning对象
- 里面有个rest framework封装的reverse(),内反向生成url,不需要指定版本,会自动生成,其实就是当前url的版本,本质上底层是使用了Django自带的reverse()实现的。
1 | class UsersView(APIView): |
- 除了这些,版本的实现还有很多
总结
使用 配置文件
1
2
3
4
5
6REST_FRAMEWORK = {
'DEFAULT_VERSION_CLASS':'rest_framework.versioning.URLPathVersioning',
'DEFAULT_VERSION':'v1',
'ALLOWED_VERSIONS':['v1','v2'],
'VERSION_PARAM':'version',
}路由系统
1 | urlpatterns = [ |
1 | urlpatterns = [ |
- 视图
1 | class UsersView(APIView): |
- 源码流程,和认证的源码类似,
- 匹配到url,然后到view视图里,执行父类的as_view()方法,该方法返回一个view函数,而在view()函数里返回的是dispatch()方法,我们就从dispatch()方法开始
- 先封装好request,然后执行initial()实现版本然后才是认证,然后是权限的判断,后面就是访问频率了
- 调用determine_version()返回的是一个元组,有两个元素,分别是版本和处理版本的对象
- 版本是在determine_version()方法中拿到的,通过versioning_class()方法,获取到URLPathVersioning对象,默认是从配置文件中获取到的,和权限,节流等流程类似,只不过那些都是拿到一个列表,而版本的只需要拿到一个versioning_class就可以了,也可以设置到视图中。