A role:
For version control
Two built-in version control class:
from rest_framework.versioning Import QueryParameterVersioning, AcceptHeaderVersioning, NamespaceVersioning, URLPathVersioning # -based parameter passing mode get the url: QueryParameterVersioning ------> such as:? / the Users Version = v1 # based on regular way the url: URLPathVersioning ----- -> / V1 / Users / # on the way accept the request headers: AcceptHeaderVersioning ------> the accept: file application / JSON; = 1.0 Version # host name based on: HostNameVersioning ------> v1.example.com # based on django routing system namespace: NamespaceVersioning ------> example.com/v1/users/
Use three parts
# Added CBV class versioning_class = URLPathVersioning
Configuration settings in
= REST_FRAMEWORK { ' DEFAULT_VERSION ' : ' V1 ' , # default version (not taken from the request object, the displayed default) ' ALLOWED_VERSIONS ' : [ ' V1 ' , ' V2 ' ], # allowed version ' VERSION_PARAM ' : ' Version ' # the URL acquired key value }
Four Global Use
= REST_FRAMEWORK {
' DEFAULT_VERSIONING_CLASS ' : ' rest_framework.versioning.QueryParameterVersioning ' ,
' DEFAULT_VERSION ' : ' V1 ' , # default version (not taken from the request object, the displayed default) ' ALLOWED_VERSIONS ' : [ ' V1 ' , ' V2 ' ], # allowed version ' VERSION_PARAM ' : ' version ' # the URL acquired key value }
Five sample code is as follows:
Based on regular:
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^(?P<version>[v1|v2]+)/publish/', views.PublishView.as_view()),
from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.versioning import URLPathVersioning class TestView(APIView): versioning_class = URLPathVersioning def get(self, request, *args, **kwargs): # 获取版本 print(request.version) # 获取版本管理的类 print(request.versioning_scheme) # 反向生成URL reverse_url = request.versioning_scheme.reverse('test', Request = Request) Print (reverse_url) return the Response ( ' the GET request, response content ' )
# Based django built, reverse generated URL from django.urls Import Reverse URL2 = Reverse (viewname = ' TTT ' , kwargs = { ' Version ' : ' V2 ' }) Print (URL2)
Source code analysis
# Perform determine_version, returns two values, where the request object into Version, scheme = self.determine_version (request, args *, ** kwargs) request.version, request.versioning_scheme = Version, scheme DEF determine_version (Self, request, * args, ** kwargs): # after configuration version of the class, instantiates iF self.versioning_class IS None: return (None, None) scheme = self.versioning_class () return (scheme.determine_version (Request, * args, ** kwargs), scheme)