rest-framework version control

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)

 

Guess you like

Origin www.cnblogs.com/HUIWANG/p/11139318.html