七、版本组件
7.1基于GET请求
#url.py
urlpatterns = [
path('home/',views.HomeView.as_view(),name='home'),
]
#setting.py
REST_FRAMEWORK = {
#定义版本号的名称,默认为'version'
'VERSION_PARAM':'version',
#允许的版本号值,如果前端传递过来的版本号的值不在此列表内,会抛出错误
'ALLOWED_VERSIONS':['v1','v2'],
}
#视图类
class HomeView(APIView):
authentication_classes = []
versioning_class = QueryParameterVersioning
def get(self,request):
#根据路由名称反向生成url,会把版本信息也带上
url=request.versioning_scheme.reverse('home',request=request)
#返回版本号和url
return Response({'版本':request.version,'url':url})
效果:
7.2基于路由url
#url.py
urlpatterns = [
path('home/<str:version>/',views.HomeView.as_view(),name='home'),
]
#视图类
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.versioning import QueryParameterVersioning
from rest_framework.versioning import URLPathVersioning
# Create your views here.
class HomeView(APIView):
authentication_classes = []
versioning_class = URLPathVersioning
def get(self,request,*args,**kwargs):
#根据路由名称反向生成url,会把版本信息也带上
url=request.versioning_scheme.reverse('home',request=request)
#返回版本号和url
return Response({'版本':request.version,'url':url})
效果:
7.3基于Accept请求头
#url.py
urlpatterns = [
# path('admin/', admin.site.urls),
path('home/',views.HomeView.as_view(),name='home'),
path('login/', views.LoginView.as_view()),
path('user/', views.UserView.as_view()),
path('order/', views.OrderView.as_view()),
]
#视图类
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.versioning import QueryParameterVersioning
from rest_framework.versioning import URLPathVersioning
from rest_framework.versioning import AcceptHeaderVersioning
# Create your views here.
class HomeView(APIView):
authentication_classes = []
versioning_class = AcceptHeaderVersioning
def get(self,request,*args,**kwargs):
#根据路由名称反向生成url,会把版本信息也带上
url=request.versioning_scheme.reverse('home',request=request)
#返回版本号和url
return Response({'版本':request.version,'url':url})
效果:
7.4全局配置
#settings.py
#drf配置
REST_FRAMEWORK = {
#这里配置完以后,就不需要在每个视图类中配置版本组件了
'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.AcceptHeaderVersioning'
}