Django - DRF - 版本控制(配合路由的反向解析获取链接)

目录

一、版本控制 - 用于控制路由的版本跳转

1-1 URLPathVersioning - 基于url的正则方式:/v1/users/

1-1-1 路由配置

1-1-2 视图函数

1-1-3 setting配置

1-2 QueryParameterVersioning - 基于url的get 传参方式:/users?version=v1

1-1-1 路由设计

1-1-2 setting配置

 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配置


一、版本控制 - 用于控制路由的版本跳转

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'], # 可选择的版本
}

猜你喜欢

转载自blog.csdn.net/qq_33961117/article/details/85074294