作用
在restful规范中要去,后端的API中需要体现版本。
基于GET
1
| versioning_class = QueryParameterVersioning
|
url中的version自动赋值给request.version
从源码得知,version这个关键字可以通过全局配置里的VERSION_PARAM来修改

基于路由URL
1
| versioning_class = URLPathVersioning
|

基于Accept请求头
1
| versioning_class = AcceptHeaderVersioning
|

全局配置
上述示例中,如果想要应用某种 版本 的形式,需要在每个视图类中定义类变量:
1 2 3 4 5 6 7 8 9
| from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.versioning import QueryParameterVersioning
class UserView(APIView): versioning_class = QueryParameterVersioning ...
|
如果你项目比较大,需要些很多的视图类,在每一个类中都写一遍会比较麻烦,所有drf中也支持了全局配置。
1 2 3 4 5 6 7 8
| # settings.py
REST_FRAMEWORK = { "DEFAULT_VERSIONING_CLASS": "rest_framework.versioning.QueryParameterVersioning", # 处理版本的类的路径 "VERSION_PARAM": "version", # URL参数传参时的key,例如:xxxx?version=v1 "ALLOWED_VERSIONS": ["v1", "v2", "v3"], # 限制支持的版本,None表示无限制 "DEFAULT_VERSION": "v1", # 默认版本 }
|

访问URL:
1 2 3 4 5 6 7 8 9 10 11
| http://127.0.0.1:8000/api/users/?version=v1 http://127.0.0.1:8000/api/users/?version=v2 http://127.0.0.1:8000/api/users/?version=v3
http://127.0.0.1:8000/api/admin/?version=v1 http://127.0.0.1:8000/api/admin/?version=v2 http://127.0.0.1:8000/api/admin/?version=v3
http://127.0.0.1:8000/api/v1/order/ http://127.0.0.1:8000/api/v2/order/ http://127.0.0.1:8000/api/v3/order/
|
反向生成URL
在每个版本处理的类中还定义了reverse
方法,他是用来反向生成URL并携带相关的的版本信息用的,例如:

1
| url1 = request.versioning_scheme.reverse("u1", request=request)
|
