Django Reat Framework --- 版本控制

一:版本控制django

  開發階段,一套網站的接口可能不止一套,所以須要在客戶端請求是明確版本,版本控制組件就是解決這個問題的。json

二:drf內置的版本控制類app

內置的類:

from rest_framework.versioning import QueryParameterVersioning,AcceptHeaderVersioning,NamespaceVersioning,URLPathVersioning

#基於url的get傳參方式:QueryParameterVersioning------>如:/users?version=v1
#基於url的正則方式(推薦):URLPathVersioning------>/v1/users/
#基於 accept 請求頭方式:AcceptHeaderVersioning------>Accept: application/json; version=1.0
#基於主機名方法:HostNameVersioning------>v1.example.com
#基於django路由系統的(名稱空間)namespace:NamespaceVersioning------>example.com/v1/users/

三:版本控制類的使用方式網站

局部使用:在視圖類中配置(在須要使用版本控制的視圖類中加入變量versioning_class = 版本控制的類)url

versioning_class=URLPathVersioning

全局使用:在settings中配置spa

REST_FRAMEWORK = {
    'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.QueryParameterVersioning',
    'DEFAULT_VERSION': 'v1',            # 默認版本(從request對象裏取不到,顯示的默認值)
    'ALLOWED_VERSIONS': ['v1', 'v2'],   # 容許的版本
    'VERSION_PARAM': 'version'          # URL中獲取值的key
}

四:基於正則的版本控制示例:版本控制

  urls.pyrest

"""versioning URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app01.views import VersionTest

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^(?P<version>[v1|v2]+)/VersionTest/$', VersionTest.as_view(),name='test'),
]

  views.py (在視圖類的方法中能夠取出版本號:request.version)code

from django.shortcuts import render,HttpResponse

# Create your views here.
from rest_framework.versioning import URLPathVersioning
from rest_framework.views import APIView
from rest_framework.response import Response
class VersionTest(APIView):
    versioning_class = URLPathVersioning
    def get(self,request,*args,**kwargs):

        version = request.version
        print(version)  #版本號
        version_class = request.versioning_scheme  #獲取版本管理的類
        print(version_class)
        reverse_url = request.versioning_scheme.reverse('test', request=request)  #反向生成url
        print(reverse_url)
        return Response()
相關文章
相關標籤/搜索