Django REST framework-版本控制
版本控制
QueryParameterVersioning
基于get传参的方式
继承APIView方式
1 在views.py 视图类中配置
from rest_framework.versioning import QueryParameterVersioning
from rest_framework.views import APIView
class Version(APIView):
def get(self, request, *args, **kwargs):
# 配置使用的版本类方法
versioning_class = QueryParameterVersioning
print(request.version) # 查看版本号
print(request.versioning_scheme) # 调用详细信息
return Response() # 返回空值
2 局部使用(视图类中)
versioning_class = QueryParameterVersioning
3 全局使用:在settings.py配置文件中配置
REST_FRAMEWORK = {
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
'DEFAULT_VERSION': 'v1', # 默认版本(从request对象里取不到,显示的默认值)
'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本
'VERSION_PARAM': 'version' # URL中获取值的key
}
4 url配置
from django.urls import path
from app01 import views
urlpatterns = [
path('versiontest/', views.Version.as_view()),
]

继承GenericAPIView方式
1 在views.py 视图类中配置
from rest_framework.generics import ListAPIView, CreateAPIView
from rest_framework.versioning import QueryParameterVersioning
class VersionView(ViewSetMixin, ListAPIView):
versioning_class = QueryParameterVersioning
queryset = models.Book.objects.all()
serializer_class = serializer.BookSerializer
def list(self, request, *args, **kwargs):
print(request.version)
print(request.versioning_scheme)
return super().list(request, *args, **kwargs)
2 局部使用(视图类中)
versioning_class = QueryParameterVersioning
3 全局使用:在settings.py配置文件中配置
REST_FRAMEWORK = {
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
'DEFAULT_VERSION': 'v1', # 默认版本(从request对象里取不到,显示的默认值)
'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本
'VERSION_PARAM': 'version' # URL中获取值的key
}
4 url配置
from django.urls import path
from app01 import views
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('version', views.VersionView)
urlpatterns = [
path('api/', include(router.urls)),
]

URLPathVersioning
基于正则的方式(推荐)
继承APIview方式
1 在views.py 视图类中配置
from rest_framework.versioning import URLPathVersioning
from rest_framework.views import APIView
class Version(APIView):
def get(self, request, *args, **kwargs):
# 配置使用的版本类方法
versioning_class = URLPathVersioning
print(request.version) # 查看版本号
print(request.versioning_scheme) # 调用详细信息
return Response() # 返回空值
2 局部使用(视图类中)
versioning_class = URLPathVersioning
3 全局使用:在settings.py配置文件中配置
REST_FRAMEWORK = {
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
'DEFAULT_VERSION': 'v1', # 默认版本(从request对象里取不到,显示的默认值)
'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本
'VERSION_PARAM': 'version' # URL中获取值的key
}
4 url配置
from django.urls import path
from app01 import views
urlpatterns = [
path('<str:version>/versiontest/', views.Version.as_view()),
]

继承GenericAPIView方式
1 在views.py 视图类中配置
from rest_framework.generics import ListAPIView, CreateAPIView
from rest_framework.versioning import URLPathVersioning
class VersionViews(ViewSetMixin, ListAPIView):
# 配置使用的版本类方法
versioning_class = URLPathVersioning
queryset = models.Book.objects.all()
serializer_class = serializer.BookSerializer
def list(self, request, *args, **kwargs):
print(request.version)
print(request.versioning_scheme)
return super().list(request, *args, **kwargs)
2 局部使用(视图类中)
versioning_class = URLPathVersioning
3 全局使用:在settings.py配置文件中配置
REST_FRAMEWORK = {
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
'DEFAULT_VERSION': 'v1', # 默认版本(从request对象里取不到,显示的默认值)
'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本
'VERSION_PARAM': 'version' # URL中获取值的key
}
4 url配置
from django.urls import path
from app01 import views
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('versions', views.VersionViews)
urlpatterns = [
path('api/<str:version>/', include(router.urls)),
]

AcceptHeaderVersioning
基于请求头的
继承APIview方式
1 在views.py 视图类中配置
from rest_framework.views import APIView
from rest_framework.versioning import AcceptHeaderVersioning
class Version(APIView):
def get(self, request, *args, **kwargs):
versioning_class = AcceptHeaderVersioning
print(request.version) # 打印版本号
print(request.versioning_scheme) # 调用详细信息
return Response() # 返回空值
2 局部使用(视图类中)
versioning_class = AcceptHeaderVersioning
3 全局使用:在settings.py配置文件中配置
REST_FRAMEWORK = {
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
'DEFAULT_VERSION': 'v1', # 默认版本(从request对象里取不到,显示的默认值)
'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本
'VERSION_PARAM': 'version' # URL中获取值的key
}
4 url配置
from django.urls import path
from app01 import views
urlpatterns = [
path('versiontest/', views.Version.as_view()),
]

继承GenericAPIView方式
1 在views.py 视图类中配置
from rest_framework.generics import ListAPIView, CreateAPIView
from rest_framework.versioning import AcceptHeaderVersioning
class VersionView(ViewSetMixin, ListAPIView):
versioning_class = AcceptHeaderVersioning
queryset = models.Book.objects.all()
serializer_class = serializer.BookSerializer
def list(self, request, *args, **kwargs):
print(request.version)
print(request.versioning_scheme)
return super().list(request, *args, **kwargs)
2 局部使用(视图类中)
versioning_class = AcceptHeaderVersioning
3 全局使用:在settings.py配置文件中配置
REST_FRAMEWORK = {
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
'DEFAULT_VERSION': 'v1', # 默认版本(从request对象里取不到,显示的默认值)
'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本
'VERSION_PARAM': 'version' # URL中获取值的key
}
4 url配置
from django.urls import path
from app01 import views
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('version', views.VersionView)
urlpatterns = [
path('api/', include(router.urls)),
]


浙公网安备 33010602011771号