REST Framework 版本控制器

2022-06-29 15:21:08 字數 2696 閱讀 3571

目錄

版本控制器介紹:

一 作用

二 內建的版本控制類

三 區域性使用

四 全域性使用

五 示例

原始碼分析

為什麼在開發過程中為什麼會有不同的版本產生, 我們之前在restful規範的時候的時候已經介紹過了, 這裡不再贅述, 在rest-framework中開發者就為我們內建了乙個版本控制項來幫助我們來更好地控制不同的版本, 下面我們就介紹一下在rest-framework中如何使用的

用於版本的控制

queryparameterversioning  基於url的get傳參方式

urlpathversioning              基於url的正則方式

acceptheaderversioning      基於accerp請求頭的方式 

namespaceversioning          基於django路由系統的命名空間

1.2兩種版本控制類是使用的較多的, 其他的使用的比較少,在使用的時候和其他元件一樣也分為區域性使用和全域性使用

from rest_framework.versioning import

queryparameterversioning,acceptheaderversioning,namespaceversioning,urlpathversioning

#基於url的get傳參方式:queryparameterversioning------>如:/users?version=v1

#基於url的正則方式:urlpathversioning------>/v1/users/##

基於主機名方法:hostnameversioning------>v1.example.com

#基於django路由系統的namespace:namespaceversioning------>example.com/v1/users/

#

在cbv類中加入

versioning_class = urlpathversioning

rest_framework =

基於正則的區域性使用方式:

url部分:

from django.conf.urls import

url, include

from web.views import

testview

urlpatterns =[

url(r

'^(?p[v1|v2]+)/test/

', testview.as_view(), name='

test'),

]

views部分:

區域性使用在對應的檢視類中加入版本控制的類即可, 

from rest_framework.views import

apiview

from rest_framework.response import

response

from rest_framework.versioning import

urlpathversioning

class

testview(apiview):

versioning_class =urlpathversioning

def get(self, request, *args, **kwargs):

#獲取版本

print

(request.version)

#獲取版本管理的類

print

(request.versioning_scheme)

#反向生成url

reverse_url = request.versioning_scheme.reverse('

test

', request=request)

print

(reverse_url)

return response('

get請求,響應內容')

#

基於django內建,反向生成url

from django.urls import

reverse

url2=reverse(viewname='

ttt',kwargs=)

print(url2)

#

執行determine_version,返回兩個值,放到request物件裡

version, scheme = self.determine_version(request, *args, **kwargs)

request.version, request.versioning_scheme =version, scheme

def determine_version(self, request, *args, **kwargs):

#當配置上版本類之後,就會例項化

if self.versioning_class is

none:

return

(none, none)

scheme =self.versioning_class()

return (scheme.determine_version(request, *args, **kwargs), scheme)

rest framework之版本控制

api版本控制可以用來在不同的客戶端使用不同的行為。rest框架提供了大量不同的版本設計。版本控制是由傳入的客戶端請求決定的,並且可能基於請求url,或者基於請求頭。有許多有效的方法達到版本控制的目的。特別是為具有多個客戶的長期系統工程進行設計時,沒有版本控制的系統也是可以的。當使用版本控制時,re...

rest framework 之版本控制

用於版本的控制 from rest framework.versioning import queryparameterversioning,acceptheaderversioning,namespaceversioning,urlpathversioning 基於url的get傳參方式 quer...

rest framework之版本控制

from rest framework.versioning import urlpathversioning,queryparameterversioning,acceptheaderversioning 基於url的正則方式 urlpathversioning v1 users 需要掌握這種 基...