目录
1-1 URLPathVersioning - 基于url的正则方式:/v1/users/
1-2 QueryParameterVersioning - 基于url的get 传参方式:/users?version=v1
1-3 AcceptHeaderVersioning - 基于请求头方式:Accept: application/json; version=1.0
1-4 HostNameVersioning - 基于主机名:v1.example.com
1-5 NamespaceVersioning - 基于路由系统:example.com/v1/users/
2-1 局部配置 - CBV内 versioning_class
一、版本控制 - 用于控制路由的版本跳转
1-1 URLPathVersioning - 基于url的正则方式:/v1/users/
1-1-1 路由配置
from django.conf.urls import url,include from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^(?P<version>[v1|v2|v3]+)/books/$', views.Book.as_view({'get':'get_all'}),name='ttt'), ]
1-1-2 视图函数
from rest_framework.pagination import CursorPagination from rest_framework.versioning import URLPathVersioning class Book(ViewSetMixin, APIView): versioning_class = URLPathVersioning def get_all(self, request,*args,**kwargs): # 版本可以从request.version内调取 print(request.version) # django 的路由反向解析 # from django.urls import reverse # url2=reverse(viewname='ttt',kwargs={'version':request.version}) # print(url2) # 提供给咱的解析 url2=request.versioning_scheme.reverse('ttt',request=request) print(url2) book_list = models.Book.objects.all() # 实例化产生一个加密分页对象 page = CursorPagination() page.ordering = 'nid' page.page_size=2 page_list = page.paginate_queryset(book_list, request, self) ser = mySer.BookSerializer(instance=page_list, many=True) return page.get_paginated_response(ser.data)
1-1-3 setting配置
REST_FRAMEWORK = { 'VERSION_PARAM': 'version', 'DEFAULT_VERSION': 'v1', 'ALLOWED_VERSIONS': ['v1', 'v2'], }
1-2 QueryParameterVersioning - 基于url的get 传参方式:/users?version=v1
1-1-1 路由设计
from django.conf.urls import url,include from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^books/', views.Book.as_view({'get':'get_all'}),name='ttt'), ]
1-1-2 setting配置
REST_FRAMEWORK = { 'VERSION_PARAM': 'version', 'DEFAULT_VERSION': 'v1', 'ALLOWED_VERSIONS': ['v1', 'v2'], }
1-1-3 视图函数
1-3 AcceptHeaderVersioning - 基于请求头方式:Accept: application/json; version=1.0
1-4 HostNameVersioning - 基于主机名:v1.example.com
1-5 NamespaceVersioning - 基于路由系统:example.com/v1/users/
二、使用配置
2-1 局部配置 - CBV内 versioning_class
2-2 全局配置 - setting配置
REST_FRAMEWORK = { # 'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning', 'VERSION_PARAM':'version', # get传输时候的key名,必须和有名分组的名字相对应 'DEFAULT_VERSION':'v1', # 默认版本 'ALLOWED_VERSIONS': ['v1', 'v2'], # 可选择的版本 }