七、Drf版本组件
七、版本组件
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 = QueryParameterVersioningdef 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 = URLPathVersioningdef 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 = AcceptHeaderVersioningdef 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'
}