1. 程式人生 > >rest-framework之版本控制

rest-framework之版本控制

作用:

用於版本的控制

內建的版本控制類

from rest_framework.versioning import URLPathVersioning, QueryParameterVersioning, AcceptHeaderVersioning
#基於url的正則方式:URLPathVersioning------>/v1/users/(需要掌握這種)
#基於url的get傳參方式:QueryParameterVersioning------>如:/users?version=v1
#基於 accept 請求頭方式:AcceptHeaderVersioning------>Accept: application/json; version=1.0
#基於主機名方法:HostNameVersioning------>v1.example.com
#基於django路由系統的namespace:NamespaceVersioning------>example.com/v1/users/

區域性使用

#在CBV類中加入
versioning_class = URLPathVersioning

全域性使用,在setting中配置:

REST_FRAMEWORK = {
    'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.QueryParameterVersioning',
    'DEFAULT_VERSION': 'v1',            # 預設版本(從request物件裡取不到,顯示的預設值)
    'ALLOWED_VERSIONS': ['v1', 'v2'],   #
允許的版本 'VERSION_PARAM': 'version' # URL中獲取值的key }

路由配置,基於正則的方式:

urlpatterns = [
 url(r'^(?P<version>[v1|v2]+)/books/$', views.Book.as_view({'get':'get_all'}),name='cao'),
]

view.py-檢視層

# 版本控制
from rest_framework.versioning import URLPathVersioning, QueryParameterVersioning, AcceptHeaderVersioning


class Book(ViewSetMixin, APIView): # 區域性使用 versioning_class = URLPathVersioning def get_all(self, request,*args,**kwargs):
     #獲取版本
print(request.version) # 路由反向解析,這種方式不好,麻煩 # from django.urls import reverse # url=reverse(viewname='cao',kwargs={'version':request.version}) # print(url) # 提供給咱的解析,反向生成url reverse_url=request.versioning_scheme.reverse('cao',request=request) print(url) response = {'status': 100, 'msg': '查詢成功'} book_list = models.Book.objects.all() # 例項化產生一個加密分頁的物件 page = CursorPagination() # 按nid排序 page.ordering = 'nid' page_list = page.paginate_queryset(book_list, request, self) # 丟到序列化類中,完成序列化 ser = MySer.BookSerializers(instance=page_list, many=True) # 最後返回資料 return page.get_paginated_response(ser.data)

總結使用:

版本控制
        掌握的:URLPathVersioning
        -在setting中配置:
                'VERSION_PARAM':'version',
                'DEFAULT_VERSION':'v1',
                'ALLOWED_VERSIONS': ['v1', 'v2'],
        -區域性使用:
            versioning_class = URLPathVersioning
            
        -全域性使用:
            'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',
        -路由配置:
            url(r'^(?P<version>[v1|v2|v3]+)/books/$', views.Book.as_view({'get':'get_all'}),name='ttt'),
        -在檢視類中的request物件中,就可以取出版本號
        -反向解析:
            url2=request.versioning_scheme.reverse('ttt',request=request)