首先咱們要知道咱們的版本是幹嗎用的呢~~你們都知道咱們開發項目是有多個版本的~~框架
當咱們項目愈來愈更新~版本就愈來愈多~~咱們不可能新的版本出了~之前舊的版本就不進行維護了~~~ide
那咱們就須要對版本進行控制~~這個DRF也給咱們提供了一些封裝好的版本控制方法~~函數
以前咱們學視圖的時候知道APIView,也知道APIView返回View中的view函數,而後調用的dispatch方法~url
那咱們如今看下dispatch方法~~看下它都作了什麼~~spa
執行self.initial方法以前是各類賦值,包括request的從新封裝賦值,下面是路由的分發,那咱們看下這個方法都作了什麼~~版本控制
咱們能夠看到,咱們的version版本信息賦值給了 request.version 版本控制方案賦值給了 request.versioning_scheme~~rest
其實這個版本控制方案~就是咱們配置的版本控制的類~~code
也就是說,APIView經過這個方法初始化本身提供的組件~~blog
咱們接下來看看框架提供了哪些版本的控制方法~~在rest_framework.versioning裏~~路由
框架一共給咱們提供了這幾個版本控制的方法~~咱們在這裏只演示一個~~由於基本配置都是同樣的~~
1 REST_FRAMEWORK = { 2 # 默認使用的版本控制類 3 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning', 4 # 容許的版本 5 'ALLOWED_VERSIONS': ['v1', 'v2'], 6 # 版本使用的參數名稱 7 'VERSION_PARAM': 'version', 8 # 默認使用的版本 9 'DEFAULT_VERSION': 'v1', 10 }
1 urlpatterns = [ 2 url(r"^versions", MyView.as_view()), 3 url(r"^(?P<version>[v1|v2]+)/test01", TestView.as_view()), 4 ]
1 class TestView(APIView): 2 def get(self, request, *args, **kwargs): 3 print(request.versioning_scheme) 4 ret = request.version 5 if ret == "v1": 6 return Response("版本v1的信息") 7 elif ret == "v2": 8 return Response("版本v2的信息") 9 else: 10 return Response("根本就匹配不到這個路由")