DRF 之 版本控制
阿新 • • 發佈:2018-11-19
1、版本控制是幹什麼用的,為什麼要有版本?
我們都知道每一個程式都是有版本的。而且版本也會升級從v1升級到v2、v3、v4·····,但是我們不可能因為新版本出現舊版本就不去維護,因為使用者有權選擇不更新版本。所以我們就需要對版本進行控制,這個DRF也給我們提供了一些封裝好的方法。
2、在版本的原始碼中遨遊
2.1 先看APIView中,有個initial方法
2.2 點選initial進入,我們可以看到將版本資訊version 和 版本控制方案scheme 分別賦值給了request.version 和 request.determine_version.
self.determine_version 這個方法是找我們自己定義的版本控制類,沒有的話就返回(None,None)
其實這個版本控制方案就是我們配置的版本控制的類,也就是說,APIView通過這個方法初始化了自己提供的元件
2.3 在rest_framework.versioning裡檢視版本控制類的方法。
3、具體用法
以URL上攜帶版本資訊為例
3.1 第一步
先自定義一個版本控制類
class MyVersion(object): def determine_version(self, request, *args, **kwargs): version = request.query_params.get("自定義一個版本控制類version") if not version: version = 'v1' return version
3.2 第二部 在配置檔案中註冊
REST_FRAMEWORK = { # 這個是預設使用的版本控制類 "DEFAULT_VERSIONING_CLASS": "utils.version.MyVersion", # 這個版本控制類的路徑。 # 預設使用的的版本 'DEFAULT_VERSION': '配置seting.pyv1', # 允許使用的版本 'ALLOWED_VERSIONS': ['v1','v2'], # 版本使用的引數名稱 'VERSION_PARAM': 'version' }
3.3 在url中寫路由
# 這個urls 總urls中的 urlpatterns = [ url(r'^version/', include('Version_Demo.urls')) # 這裡用了路由分發 ] # 這個urls是Version_Demo的app中的 urlpatterns = [ url(r'^demo/', Version_Demo.as_view()), ]urls.py
3.4 試圖測試
class Version_Demo(APIView): # 要繼承APIView ,因為version是在APIView中的 def get(self, request): print(request.version) if request.version == 'v2': print(request.version) return Response('這是v2版本') return Response('這是v1版本')試圖測試