rest-framework版本控制
一、官网地址
二、获取版本号有很多种,
- 1、在
url
上使用query
的方式(?version=v1
) - 2、在
url
上使用path
方式 - 3、可以在请求头中加上
- 4、在请求参数的时候带上
三、直接在实体类中request
中获取到版本号
1、前面我们介绍
restfull
规范的时候就讲到一个版本的2、
url
地址http://127.0.0.1:8000/app01/api/v1/user/?token=1ea94bc978147f46c402c238e5adaf07&version=v1
3、直接在视图中获取版本号
class UserView(APIView): permission_classes = [] authentication_classes = [] def get(self, request, *args, **kwargs): print(request.GET.get('version')) print(request._request.GET.get('version')) print(request.query_params.get('version')) return HttpResponse('用户信息')
四、单独定义一个类来使用query
方式实现获取版本
1、定义类
class ParamVersion(object): def determine_version(self, request, *args, **kwargs): # 这个地方也可以使用request.GET.get() # 只是rest-framework中在Request类中封装了(可以查看源码) version = request.query_params.get('version') return version
2、在类中使用
class UserView(APIView): permission_classes = [] authentication_classes = [] # 使用刚刚定义的类 versioning_class = ParamVersion def get(self, request, *args, **kwargs): # 上面使用了versioning_class=类名,就会把version放到request中 print(request.version) return HttpResponse('用户信息')
四、直接使用内置版本
1、实现代码
from rest_framework.versioning import QueryParameterVersioning class UserView(APIView): permission_classes = [] authentication_classes = [] versioning_class = QueryParameterVersioning def get(self, request, *args, **kwargs): # 如果没在配置文件中配置就默认是version print(request.version) return HttpResponse('用户信息')
2、配置文件中配置版本名称及版本号
REST_FRAMEWORK = {
'DEFAULT_VERSION': 'v1',
'ALLOWED_VERSIONS': ['v1', 'v2'],
'VERSION_PARAM': 'version'
}
五、在配置文件中进行全局配置版本
1、
settings.py
中配置REST_FRAMEWORK = { 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.QueryParameterVersioning', 'DEFAULT_VERSION': 'v1', 'ALLOWED_VERSIONS': ['v1', 'v2'], 'VERSION_PARAM': 'version' }
2、使用了上面的全局方式配置后就不需要在视图类中进行配置了
六、使用path
的方式配置版本
1、设置
url
urlpatterns = [ ... path('<str:version>/user/', user.User1View.as_view()) ]
2、
url
地址http://127.0.0.1:8000/app01/api/v1/user/
3、视图类中获取
path
中的版本号class User1View(APIView): permission_classes = [] authentication_classes = [] def get(self, request, *args, **kwargs): print(kwargs) return HttpResponse('版本号{0}'.format(kwargs.get('version')))
七、使用rest-framework
内置的方法配置path
获取版本号
1、导包
from rest_framework.versioning import URLPathVersioning
2、url配置和上面一样的
3、视图类中使用
URLPathVersioning
from rest_framework.versioning import URLPathVersioning class User1View(APIView): permission_classes = [] authentication_classes = [] versioning_class = URLPathVersioning def get(self, request, *args, **kwargs): print(kwargs) print(request.version) return HttpResponse('版本号{0}'.format(kwargs.get('version')))
八、全局配置path
的方式
1、在
settings.py
中配置REST_FRAMEWORK = { 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning', 'DEFAULT_VERSION': 'v1', 'ALLOWED_VERSIONS': ['v1', 'v2'], 'VERSION_PARAM': 'version' }
2、在视图类中就可以不需要使用