rest-framework之版本控制

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()),
]


image

image


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
}
原文地址:https://www.cnblogs.com/weiyiming007/p/12523742.html