django restframework学习笔记:版本组件

作用

在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)