1. 程式人生 > >DRF 之 版本控制

DRF 之 版本控制

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': '
v1', # 允許使用的版本 'ALLOWED_VERSIONS': ['v1','v2'], # 版本使用的引數名稱 'VERSION_PARAM': 'version' }
配置seting.py

  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版本')
試圖測試