日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

DRF版本控制

發(fā)布時(shí)間:2024/4/17 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DRF版本控制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

DRF版本控制

為什么需要版本控制

API 版本控制允許我們?cè)诓煌目蛻舳酥g更改行為(同一個(gè)接口的不同版本會(huì)返回不同的數(shù)據(jù))。 DRF提供了許多不同的版本控制方案。

可能會(huì)有一些客戶端因?yàn)槟承┰虿辉倬S護(hù)了,但是我們后端的接口還要不斷的更新迭代,這個(gè)時(shí)候通過(guò)版本控制返回不同的內(nèi)容就是一種不錯(cuò)的解決方案。

DRF提供的版本控制方案

DRF提供了五種版本控制方案,如下圖:

版本控制系統(tǒng)的使用

全局配置

這里我們以?URLPathVersioning 為例,還是在項(xiàng)目的settings.py中REST_FRAMEWORK配置項(xiàng)下配置:

REST_FRAMEWORK = {...'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning','DEFAULT_VERSION': 'v1', # 默認(rèn)的版本'ALLOWED_VERSIONS': ['v1', 'v2'], # 有效的版本'VERSION_PARAM': 'version', # 版本的參數(shù)名與URL conf中一致 }

urls.py中

urlpatterns = [...url(r'^(?P<version>[v1|v2]+)/publishers/$', views.PublisherViewSet.as_view({'get': 'list', 'post': 'create'})),url(r'^(?P<version>[v1|v2]+)/publishers/(?P<pk>\d+)/$', views.PublisherViewSet.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),]

我們?cè)谝晥D中可以通過(guò)訪問(wèn) request.version 來(lái)獲取當(dāng)前請(qǐng)求的具體版本,然后根據(jù)不同的版本來(lái)返回不同的內(nèi)容:

我們可以在視圖中自定義具體的行為,下面以不同的版本返回不同的序列化類為例

class PublisherViewSet(ModelViewSet):def get_serializer_class(self):"""不同的版本使用不同的序列化類"""if self.request.version == 'v1':return PublisherModelSerializerVersion1else:return PublisherModelSerializerqueryset = models.Publisher.objects.all()

局部配置

注意,通常我們是不會(huì)單獨(dú)給某個(gè)視圖設(shè)置版本控制的,如果你確實(shí)需要給單獨(dú)的視圖設(shè)置版本控制,你可以在視圖中設(shè)置versioning_class屬性,如下:

class PublisherViewSet(ModelViewSet):...versioning_class = URLPathVersioning

?

轉(zhuǎn)載于:https://www.cnblogs.com/lxfpy/p/11097844.html

總結(jié)

以上是生活随笔為你收集整理的DRF版本控制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。