DRF的認證,頻率,許可權
阿新 • • 發佈:2019-01-14
1,DRF的認證
- 初識認證:瀏覽器是無狀態的,一次導致每次發的請求都是新的請求,所以每次請求,伺服器都會進行校驗,這樣就很繁瑣,這趟我們就需要給每一個使用者登入後一個新的標識,瀏覽器每次都會帶著這個唯一標識和在伺服器中的標識做匹配,成功就通過,不成功就不通過.
- 認證的使用,見下圖:
1.2, DRF的相關程式碼:
model表的建立 view檢視函式 認證類 檢視的測試2,DRF許可權
- 和django的全下類似,restframeworke也是給某一些使用者新增角色,通過給不同的角色分配不同的許可權,
- 原始碼分析如下:
說明:因為python程式碼是一行一行執行的,所以先是認證,然後是許可權,在是頻率,按這個順序執行程式碼.
許可權程式碼如下:
許可權類 許可權的檢視viewREST_FRAMEWORK = {
# 預設使用的版本控制類
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
# 允許的版本
'ALLOWED_VERSIONS': ['v1', 'v2'],
# 版本使用的引數名稱
'VERSION_PARAM': 'version',
# 預設使用的版本
'DEFAULT_VERSION': 'v1',
# 配置全域性認證
# 'DEFAULT_AUTHENTICATION_CLASSES': ["BRQP.utils.MyAuth", ]
# 配置全域性許可權
"DEFAULT_PERMISSION_CLASSES": ["BROP.utils.MyPermission"] }
3,DRF頻率
- 頻率的由來:開發的API介面呼叫需要限制其頻率,以節約伺服器資源和避免惡意的頻繁呼叫
- 原始碼截圖如下:
前邊的和上邊的一樣,剩下的只有這一個不一樣
3.1,具體程式碼如下:
自定義頻率限制類 自定義頻率限制類的配置3.2,頻率限制的頻率如下:
- DRF中的頻率控制基本原理是基於訪問次數和時間的,當然我們可以通過自己定義的方法來實現,當我們請求進來時,走到我們頻率元件的時候,DRF內部會有一個字典記錄訪問者的ip,以這個訪問者的ip作為key,value為一個列表,存放每次訪問的時間,(IP1:[第三次訪問的時間, 第二次訪問的時間, 第一次訪問的時間])把每次訪問的最新時間放入列表的最前端,記錄這樣一個數據結構,我們就可以通過限制時間和次數去限流
- 判斷訪問者的IP是否在這個請求的IP字典中
- 保證這個列表裡都是最近10秒內訪問的時間
- 判斷當前請求時間和和列表裡最早的請求時間差
- 如果大於10秒,說明請求以及不是最近10秒的,需要刪除掉
- 繼續判斷倒數第二個,直到差小於10秒
- 判斷列表的長度(即訪問次數)是否大於我們設定的5次,如果大於就限流,並把時間放入最前端.
4,DRF的生命週期