1. 程式人生 > >DRF的認證,頻率,許可權

DRF的認證,頻率,許可權

1,DRF的認證

  • 初識認證:瀏覽器是無狀態的,一次導致每次發的請求都是新的請求,所以每次請求,伺服器都會進行校驗,這樣就很繁瑣,這趟我們就需要給每一個使用者登入後一個新的標識,瀏覽器每次都會帶著這個唯一標識和在伺服器中的標識做匹配,成功就通過,不成功就不通過.
  • 認證的使用,見下圖:

 

1.2, DRF的相關程式碼:

model表的建立 view檢視函式 認證類 檢視的測試

2,DRF許可權

  • 和django的全下類似,restframeworke也是給某一些使用者新增角色,通過給不同的角色分配不同的許可權,
  • 原始碼分析如下:

說明:因為python程式碼是一行一行執行的,所以先是認證,然後是許可權,在是頻率,按這個順序執行程式碼.

許可權程式碼如下:

許可權類 許可權的檢視view
REST_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的生命週期