1、作用
用于版本的控制
2、内置的版本控制类
from rest_framework.versioning import QueryParameterVersioning,AcceptHeaderVersioning,NamespaceVersioning,URLPathVersioning #基于url的get传参方式:QueryParameterVersioning------>如:/users?version=v1 #基于url的正则方式:URLPathVersioning------>/v1/users/ #基于 accept 请求头方式:AcceptHeaderVersioning------>Accept: application/json; version=1.0 #基于主机名方法:HostNameVersioning------>v1.example.com #基于django路由系统的namespace:NamespaceVersioning------>example.com/v1/users/
3、局部使用
views.py
from django.shortcuts import render from app01 import models from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.viewsets import ModelViewSet # 导入模块,一般URLPathVersioning使用的较多 from rest_framework.versioning import URLPathVersioning class Test(APIView): versioning_class = URLPathVersioning # 局部使用版本控制类 def get(self, request, *args, **kwargs): print(request.version) # 打印出所使用的版本 print(type(request.versioning_scheme)) # 打印出所使用的控制类 return Response() def post(self, request): print(request.data) print(type(request.data)) return Response()
settings.py
REST_FRAMEWORK = { 'DEFAULT_VERSION': 'v1', # 默认版本(从request对象里取不到,显示的默认值) 'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本 'VERSION_PARAM': 'version' # URL中获取值的key }
urls.py
urlpatterns = [ url(r'^admin/', admin.site.urls), # 允许v1或v2,默认是v1 url(r'^(?P<version>[v1|v2]+)/test/', views.Test.as_view()), ]
4、全局使用
全局使用局部使用单独在视图类中添加了,直接在setting.py中添加版本控制类:
REST_FRAMEWORK = { # 添加版本控制类(全局使用) 'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning', 'DEFAULT_VERSION': 'v1', # 默认版本(从request对象里取不到,显示的默认值) 'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本 'VERSION_PARAM': 'version' # URL中获取值的key }