"首先,我們開發的專案會有多個版本.
其次,我們的專案版本會隨著更新越來越多,我們不可能因出了新版本就不維護舊版本了.
那麼,我們就需要對版本進行控制——drf版本控制.
目錄原始碼剖析
drf檢視中的apiview返回的是view類中的view函式,然後呼叫dispatch
方法.
那麼,我們來看看dispatch
方法都做了些什麼:
執行self.initial
方法之前是各種賦值,包括request的重新封裝賦值.
self.initial
方法中有路由的分發,我們再來看下此方法具體都做了些什麼:
我們可以看到:
version版本資訊賦值給了request.version
.
scheme版本控制方案賦值給了request.versioning_scheme
.
其實這個版本控制方法就是我們配置的版本控制的類.
也就是說,apiview通過這個方法初始化自己提供的元件.
我們接下來看看rest_framework
為我們提供了那些版本控制的方法(在from rest_framework import versioning
檔案內):
如上,rest_framework
為我們提供的所有版本控制的方法.
下面,我們來看看在url上攜帶版本資訊的用法.
如上圖所有示,urlpathversioning是在url上攜帶版本資訊的方法.
步驟一setting.py
rest_framework =
步驟二urls.py
from django.conf.urls import url
from blog.views import test01view # 匯入檢視
urlpatterns = [
# 如下路徑形式:
url(r'^(?p[v1|v2]+)/test01', test01view.as_view()),
]
步驟三測試效果如下圖:views.py
from rest_framework.views import apiview
from rest_framework.response import response
class test01view(apiview):
def get(self, request, *args, **kwargs):
print("版本:", kwargs['version'])
print("版本控制資訊:", request.versioning_scheme)
if request.version == 'v1':
# 處理版本v1的業務邏輯
return response("這是版本v1的資訊")
# 處理版本v2的業務邏輯
return response("這是版本v2的資訊")
步驟一 建立自定義版本控制類class myversion():
def determine_version(self, request, *args, **kwargs):
# 返回值是版本號
# 獲取前端傳過來的版本號 並且把版本號返回
version = request.query_params.get('version')
if not version:
# 預設為版本v1,否則都為版本v2
version = 'v1'
return version
步驟二setting.py
rest_framework =
步驟三urls.py
from blog.views import test02view # 匯入檢視
urlpatterns = [
# 如下路徑格式
url(r'^test02/$', test02view.as_view()),
]
步驟四測試效果如下圖:views.py
from rest_framework.views import apiview
from rest_framework.response import response
class test02view(apiview):
def get(self, request):
print("版本:", request.version)
print("版本控制資訊:", request.versioning_scheme)
if request.version == 'v2':
# 處理版本v2的業務邏輯
return response("這是版本v2的資訊")
# 處理版本v1的業務邏輯
return response("這是版本v1的資訊")
is ok.
DRF版本控制
api 版本控制允許我們在不同的客戶端之間更改行為 同乙個介面的不同版本會返回不同的資料 drf提供了許多不同的版本控制方案。可能會有一些客戶端因為某些原因不再維護了,但是我們後端的介面還要不斷的更新迭代,這個時候通過版本控制返回不同的內容就是一種不錯的解決方案。drf提供了五種版本控制方案,如下圖...
drf 版本控制
目錄因為程式在不停的更新迭代,新版和舊版差別比較大,但此時有些使用者沒用進行更新,還是訪問的舊版,此時就需要進行版本控制,讓使用者體驗更好 from rest framework.versioning import queryparameterversioning,acceptheaderversi...
DRF 之 版本控制
1 版本控制是幹什麼用的,為什麼要有版本?我們都知道每乙個程式都是有版本的。而且版本也會公升級從v1公升級到v2 v3 v4 但是我們不可能因為新版本出現舊版本就不去維護,因為使用者有權選擇不更新版本。所以我們就需要對版本進行控制,這個drf也給我們提供了一些封裝好的方法。2 在版本的原始碼中遨遊 ...