Django DRF版本號的處理

在restful規范中,后端的API中需要體現版本。如果項目比較大,需要些很多的視圖類,在每一個類中都寫一遍會比較麻煩,所以drf中也支持了全局配置。在每個版本處理的類中還定義了`reverse`方法,他是用來反向生成URL并攜帶相關的的版本信息用的。

REST_FRAMEWORK = {"DEFAULT_VERSIONING_CLASS": "rest_framework.versioning.QueryParameterVersioning",  # 處理版本的類的路徑"VERSION_PARAM": "version",  # URL參數傳參時的key,例如:xxxx?version=v1"ALLOWED_VERSIONS": ["v1", "v2", "v3"],  # 限制支持的版本,None表示無限制"DEFAULT_VERSION": "v1",  # 默認版本
}

一、基于GET傳遞參數

1、settings.py

REST_FRAMEWORK={"UNAUTHENTICATED_USER": None,"VERSION_PARAM":"version",  # 決定url中版本的參數值;不設置默認也是這個值,可以通過修改這里修改,例如改為"v";"DEFAULT_VERSION":"v1", # 默認版本"ALLOWED_VERSIONS":["v1","v2"] #支持的版本范圍
}

2、urls.py

urlpatterns = [# path('admin/', admin.site.urls),path('home/', views.HomeView.as_view(),name="hh"),
]

3、views.py

from rest_framework.versioning import   QueryParameterVersioningclass HomeView(APIView):# 傳遞過程中可以攜帶版本信息# http://127.0.0.1:8000/home/?version=v1 ,會自動讀出版本賦值給request.versionversioning_class = QueryParameterVersioningdef get(self,request):print(request.version)print(request.versioning_scheme)url = request.versioning_scheme.reverse("hh",request=request)print("反向生產URL:",url)return Response("...")

二、基于路由傳遞參數

1、urls.py

urlpatterns = [# 下面這兩種寫法都可以,一種是基于re_path的路由# path('api/<str:version>/home/', views.HomeView.as_view(), name="hh"),re_path(r'^api/(?P<version>\w+)/home/',views.HomeView.as_view(),name="hh"),]

2、settings.py

REST_FRAMEWORK={"UNAUTHENTICATED_USER": None,"VERSION_PARAM":"version",  # 決定url中版本的參數值;不設置默認也是這個值,可以通過修改這里,修改;"DEFAULT_VERSION":"v1", # 默認版本"ALLOWED_VERSIONS":["v1","v2"] #支持的版本范圍
}

3、views.py

from rest_framework.versioning import   URLPathVersioningclass HomeView(APIView):# 傳遞過程中可以攜帶版本信息# http://127.0.0.1:8000/home/?version=v1 ,會自動讀出版本賦值給request.versionversioning_class = URLPathVersioningdef get(self,request,*args,**kwargs):print(request.version)print(request.versioning_scheme)url = request.versioning_scheme.reverse("hh",request=request)print("反向生產URL:",url)return Response("...")

三、基于請求頭傳遞參數

1、urls.py

urlpatterns = [# 基于請求頭傳遞參數path('api/home/', views.HomeView.as_view(), name="hh"),
]

2、views.py?

from rest_framework.versioning import   QueryParameterVersioning,URLPathVersioning,AcceptHeaderVersioningclass HomeView(APIView):versioning_class = AcceptHeaderVersioningdef get(self,request,*args,**kwargs):print(request.version)print(request.versioning_scheme)url = request.versioning_scheme.reverse("hh",request=request)print("反向生產URL:",url)return Response("...")

四、在實際項目中,第二種通過URL傳遞版本號的方式還是比較常用,在使用的時候,可以通過全局配置,在views中就不需要在引入和單獨設置了,可以直接使用,案例如下:?

1、settings.py

REST_FRAMEWORK={# 版本號傳遞全局設置"VERSION_PARAM":"version",  # 決定url中版本的參數值;不設置默認也是這個值,可以通過修改這里,修改;"DEFAULT_VERSION":"v1", # 默認版本"ALLOWED_VERSIONS":["v1","v2"], #支 持的版本范圍"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning",
}

2、urls.py

  # 基于URL傳遞參數path('api/<str:version>/home/', views.HomeView.as_view(), name="hh"),

3、views.py

from rest_framework.views import APIView
from rest_framework.response import Responseclass HomeView(APIView):def get(self,request,*args,**kwargs):print(request.version)print(request.versioning_scheme)url = request.versioning_scheme.reverse("hh",request=request)print("反向生產URL:",url)return Response("...")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160985.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160985.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160985.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

還記得高中生物書上的莫斯密碼嗎?利用Python破解摩斯密碼的代碼示例!

文章目錄 前言摩爾斯電碼Python實現摩斯密碼對照表加密解密測試 完整代碼總結關于Python技術儲備一、Python所有方向的學習路線二、Python基礎學習視頻三、精品Python學習書籍四、Python工具包項目源碼合集①Python工具包②Python實戰案例③Python小游戲源碼五、面試資料六、Py…

Arduino驅動MLX90614紅外溫度傳感器(溫濕度傳感器)

目錄 1、傳感器特性 2、MLX90614發射率補償方法 3、控制器和傳感器連線圖 4、驅動程序 MLX90614紅外測溫模塊,通過探測物體紅外輻射能量的大小和波長的分布來檢測物體的表面溫度。紅外測溫器由光學系統、光電探測器、信號放大器

一文讀懂 Linux mmap

文章目錄 1.簡介2.實現原理3.相關函數4.mmap和常規文件操作的區別5.作用參考文獻 1.簡介 mmap&#xff08;memory map&#xff09;即內存映射&#xff0c;用于將一個文件或設備映射到進程的地址空間。 實現這樣的映射關系后&#xff0c;進程虛擬地址空間中一段內存地址將與文…

TorchScript C++ 自定義運算符 cpucuda

參考 在 C 中注冊調度運算符 使用自定義 C 運算符擴展 TorchScript 環境&#xff1a; NVIDIA Driver Version : 545.23.08CUDA Version: 12.1Python Version: 3.11Pytorch Version: 2.1Cmake version : 3.18.1工作目錄&#xff1a;workspace/test 一、 C 自定義運算符 創建…

逐字節講解 Redis 持久化(RDB 和 AOF)的文件格式

前言 相信各位對 Redis 的這兩種持久化機制都不陌生&#xff0c;簡單來說&#xff0c;RDB 就是對數據的全量備份&#xff0c;AOF 則是增量備份&#xff0c;而從 4.0 版本開始引入了混合方式&#xff0c;以 7.2.3 版本為例&#xff0c;會生成三類文件&#xff1a;RDB、AOF 和記…

2014年5月28日 Go生態洞察:GopherCon 2014大會回顧

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…

Java面試附答案:掌握關鍵技能,突破面試難題!

問題&#xff1a;什么是大O表示法&#xff1f;它在Java中的應用是什么&#xff1f; 回答&#xff1a; 大O表示法是一種用來衡量算法復雜度的方法&#xff0c;它描述了算法的時間復雜度和空間復雜度的增長速度。它使用符號O(n)來表示算法的漸進時間復雜度&#xff0c;其中n表示…

如何讓Python2與Python3共存

安裝 首先分別安裝Py2和Py3&#xff0c;我都安裝到C盤根目錄里了&#xff0c;然后分別將Py2和Py3都配置到系統環境變量中去&#xff1a;C:\Python36\Scripts\;C:\Python36\;C:\Python27\;C:\Python27\Scripts; 配置 修改兩個版本的可執行文件名字 驗證 重新配置一下pip …

Ubuntu刪除應用圖標

刪除用戶下的圖標 sudo nautilus ~/.local/share/applications刪除系統下的圖標 sudo nautilus /usr/share/applications

大數據-之LibrA數據庫系統告警處理(ALM-25500 KrbServer服務不可用)

告警解釋 系統按30秒周期性檢測組件KrbServer的服務狀態。當檢測到組件KrbServer服務異常時產生該告警。 當檢測到組件KrbServer服務恢復時告警恢復。 告警屬性 告警ID 告警級別 可自動清除 25500 致命 是 告警參數 參數名稱 參數含義 ServiceName 產生告警的服務…

解決MySQL中某列數據過長無法入庫的問題-Details:data too long for column `xxx` at row 1

問題描述&#xff1a; 我在將軌跡的經緯度轉換為字符串入庫時&#xff0c;遇到寫入問題 Mysql數據入庫報錯&#xff1a; Caused by:java.long.exception:寫入數據庫表失敗.Details:data too long for column xxx at row 1&#xff0c;我的xxx字段類型是string,在mysql庫表中…

加速CI構建,實現高效流水線——CloudBees CI發布工作區緩存功能

加速軟件交付流程能夠更快接觸到客戶&#xff0c;獲得競爭優勢。然而&#xff0c;識別這一過程中存在的瓶頸可能頗具挑戰。讓我們從審查構建和測試階段開始著手。例如&#xff0c;當CI作業執行時間較長時&#xff0c;它會延遲開發人員的反饋循環&#xff0c;從而可能導致發布延…

使用Python解析CAN總線

緣起 在新能源車輛的開發和維護中&#xff0c;經常需要對CAN總線數據進行分析。CANOE等總線軟件雖然方便&#xff0c;但功能有限&#xff0c;難以滿足數據分析的要求。Matlab的Vehicle Network Toolbox可以方便的進行數據解析和分析&#xff0c;它是閉源且收費的。因此&#x…

SpringBoot啟動順序

前言 每次有人問起SpringBoot的啟動順序是不是又來翻博客了&#xff1f;其實只需要稍微查看Spring的源碼即可 步驟 SpringBoot的入口org.springframework.boot.SpringApplication#run(String... args), 這里面實現了SpringBoot程序啟動的所有步驟 啟動事件的順序可以看監聽器…

uni-app 使用uni.getLocation獲取經緯度配合騰訊地圖api獲取當前地址

前言 最近在開發中需要根據經緯度獲取當前位置信息&#xff0c;傳遞給后端&#xff0c;用來回顯顯示當前位置 查閱uni-app文檔&#xff0c;發現uni.getLocation () 可以獲取到經緯度&#xff0c;但是在小程序環境沒有地址信息 思考怎么把經緯度換成地址&#xff0c;如果經緯度…

buildadmin+tp8表格操作(1)----表頭上方添加按鈕和自定義按鈕

buildAdmin 的表頭上添加一些按鈕&#xff0c;并實現功能 添加按鈕 <template><!-- buttons 屬性定義了 TableHeader 本身支持的頂部按鈕&#xff0c;僅需傳遞按鈕名即可 --><!-- 這里的框架自帶的 頂部按鈕 分別有 刷新 &#xff0c; 添加&#xff0c; 編輯&…

C++ 問題 怎么在C++11標準語法中調用C++20的類

一. 問題 在工作中,因為一個算法功能需要跟別的部門對接,他們提供了該算法的頭文件.h,靜態庫.lib,動態庫.dll。但是頭文件中使用了C++20才有的新特性,如#include等,而本地使用的vs2015開發環境,只支持C++11標準語法,這種情況下,該怎么把該算法集成到本地項目中呢? …

寫單元測試,沒你想得那么簡單!

前言 單元測試是什么我們就簡單介紹一下&#xff1a; 單元測試是針對程序模塊&#xff08;軟件設計的最小單位&#xff09;來進行正確性檢驗的測試工作。程序單元是應用的最小可測試部件。 接下來是本人對單元測試的理解和實踐。里面沒有廢話&#xff0c;希望每句話能說到你心…

YOLOv8改進實戰 | 更換主干網絡Backbone(六)之輕量化模型VanillaNet進階篇

前言 輕量化網絡設計是一種針對移動設備等資源受限環境的深度學習模型設計方法。下面是一些常見的輕量化網絡設計方法: 網絡剪枝:移除神經網絡中冗余的連接和參數,以達到模型壓縮和加速的目的。分組卷積:將卷積操作分解為若干個較小的卷積操作,并將它們分別作用于輸入的不…

每日一題(LeetCode)----鏈表--分隔鏈表

每日一題(LeetCode)----鏈表–分隔鏈表 1.題目&#xff08;86. 分隔鏈表&#xff09; 給你一個鏈表的頭節點 head 和一個特定值 x &#xff0c;請你對鏈表進行分隔&#xff0c;使得所有 小于 x 的節點都出現在 大于或等于 x 的節點之前。 你應當 保留 兩個分區中每個節點的初…