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=v13、直接在视图中获取版本号
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 version2、在类中使用
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、设置
urlurlpatterns = [ ... 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 URLPathVersioning2、url配置和上面一样的
3、视图类中使用
URLPathVersioningfrom 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、在视图类中就可以不需要使用