django中restframework中的版本

解決:通過參數傳遞版本號

 a. 通過url路徑傳參 

from rest_framework.versioning import URLPathVersioning

  b. url中通過GET傳參

from rest_framework.versioning import QueryParameterVersioning

注:所有的版本類一定有 determine_version(self, request, *args, **kwargs) 方法,用於把版本獲取到。

 

一。在URL路徑中傳參(推薦使用)

       1. 在settting中定義版本參數,有四個,一個全局的版本功能對象,一個默認的版本,一個允許的版本(如果是不允許的版本,會返回錯誤),一個傳遞的參數名稱。

REST_FRAMEWORK = {
    "DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.QueryParameterVersioning",  # 設置全局版本功能
    "DEFAULT_VERSION":"v1",             # 默認的版本
    "ALLOWED_VERSIONS":['v1', 'v2'],    # 允許的版本
    "VERSION_PARAM":"version",          # 傳遞的參數名
}

      2. 在urls中定義要傳遞的版本名稱:

urlpatterns = [
    url('^api/(?P<version>[v1|v2]+)/version/$', views.Version.as_view(), name='version'),
]

 

    3. 因爲是全局設置,所以視圖中不用設置也可以

class Version(APIView):
    def get(self, request, *args, **kwargs):
        print(request.version)        # 版本數據
        print(request.versioning_scheme)    # 版本對象,這裏的對象是QueryParameterVersioning

        # 反向生成url, 參數viewname是url的名稱
        u1 = request.versioning_scheme.reverse(viewname="version", request=request)
        # 結果是:http://127.0.0.1:8000/api/v2/version/

        return JsonResponse({"x":'x'})

 

    4. 效果:

    

二。URL中通過GET傳參(不推薦)

    1. 在settting中定義版本參數,有三個,一個默認的版本,一個允許的版本(如果是不允許的版本,會返回錯誤),一個傳遞的參數名稱。

REST_FRAMEWORK = {
    "DEFAULT_VERSION":"v1",             # 默認的版本
    "ALLOWED_VERSIONS":['v1', 'v2'],    # 允許的版本
    "VERSION_PARAM":"version",          # 傳遞的參數名
}

   2. 在視圖views中填入 versioning_class 類參數(request.version是返回的參數結果)

from rest_framework.versioning import QueryParameterVersioning

class Version(APIView):
    versioning_class = QueryParameterVersioning
    def get(self, request, *args, **kwargs):
        print(request.version)                  #返回的版本結果
        print(request.versioning_scheme)    # 版本對象,這裏的對象是QueryParameterVersioning
        return JsonResponse({"x":'x'})

   3. 結果如圖

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章