最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django Rest framework頻率原理與限制

 更新時間:2019年07月26日 10:06:35   作者:ZhuYongKang  
這篇文章主要介紹了Django Rest framework頻率原理與限制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

前言

開發(fā)平臺的API接口調(diào)用需要限制其頻率,以節(jié)約服務(wù)器資源和避免惡意的頻繁調(diào)用.

DRF就為我們提供了一些頻率限制的方法.

DRF中的版本、認(rèn)證、權(quán)限、頻率組件的源碼是一個流程,且頻率組件在最后執(zhí)行.

DRF頻率組件原理

DRF中的頻率控制基本原理是基于訪問次數(shù)和時間的,當(dāng)然我們也可以通過自己定義的方法來實現(xiàn).

當(dāng)請求進(jìn)來,走到我們的頻率組件時,DRF內(nèi)部會有一個字典來記錄訪問者的IP.

以這個字典的IP為key,value為一個列表,存放訪問者每次訪問的時間:{PI1: [第三次訪問時間, 第二次訪問時間, 第一次訪問時間, ]}

把每次訪問的最新時間放入列表的最前面,記錄這樣一個數(shù)據(jù)結(jié)構(gòu)后,通過如下方式限制:

如果我們設(shè)置的是10秒內(nèi)只能訪問5次:

1.判斷訪問者的IP是否在這個請求IP的字典里.

2.保證這個列表里都是都是最近10秒內(nèi)訪問的時間.

判斷當(dāng)前請求時間和列表里最早的(也就是最后一個)請求時間差

如果差大于10秒,說明請求不是最近10秒內(nèi)的,刪除掉最后一個

繼續(xù)判斷倒數(shù)第二個、第三個,直到差小于10秒為止

3.判斷列表的長度(即訪問次數(shù))是否大于我們設(shè)置的5次.

如果大于,則限制其訪問

如果小于,則放行,并把時間記錄到列表的最前面

使用自帶的頻率限制類

首先 配置頻率限制類

from rest_framework.throttling import SimpleRateThrottle # 導(dǎo)入內(nèi)置的頻率限制類

class DRFThrottle(SimpleRateThrottle):
  """注意:這里都是必備的屬性、方法和返回值"""
  scope = 'WD'
  def get_cache_key(self, request, view):
    # 拿IP地址
    return self.get_ident(request)

然后 配置文件

REST_FRAMEWORK = {
  # 指定頻率限制的類
  "DEFAULT_THROTTLE_CLASSES": ['blog.throttle.DRFThrottle'],
  # WD是scope定義的值,3/m表示每分鐘不能超過3次訪問
  "DEFAULT_THROTTLE_RATES": {"WD": "3/m"},
}

"""
如果只是想給單個視圖做頻率限制:
則刪除這里的"DEFAULT_THROTTLE_CLASSES"配置項
并在要做頻率限制的視圖中指定頻率限制類即可
指定語法:throttle_classes = ["頻率限制類", ]
"""

開始測試

訪問測試頁面,連續(xù)刷新3次后,可看到:


使用自定義的頻率限制類

首先 自定義頻率限制類

import time

VISIT_RECORD = {} # 限制訪問次數(shù)的字典

class MyThrottle():
  """
  自定義頻率限制類,一分鐘允許訪問5次
  注意:自定義頻率限制類中必須要有allow_request和wait方法
  前者用于頻率限制的邏輯,后者用于返回限制時間還剩多少秒
  """

  def __init__(self):
    self.history = []

  def allow_request(self, request, view):
    """用于限制訪問的邏輯"""
    # 獲取用戶的IP地址
    ip = request.META.get('REMOTE_ADDR')
    if ip not in VISIT_RECORD:
      VISIT_RECORD[ip] = [time.time(), ]
    else:
      history = VISIT_RECORD[ip]
      self.history = history
      history.insert(0, time.time())
      # 確保訪問時間在允許范圍之內(nèi)
      while self.history[0] - self.history[-1] > 60:
        self.history.pop()
      # 確定訪問次數(shù)在允許的范圍內(nèi)
      if len(self.history) >= 5:
        return False
    return True

  def wait(self):
    """用于返回限制時間還剩多少秒"""
    return 60 - (self.history[0] - self.history[-1])

然后 配置文件

REST_FRAMEWORK = {
  # 指定自定義的頻率限制類
  "DEFAULT_THROTTLE_CLASSES": ['blog.throttle.MyThrottle'],
}

> """
如果只是想給單個視圖做頻率限制:
則刪除這里的"DEFAULT_THROTTLE_CLASSES"配置項
并在要做頻率限制的視圖中指定頻率限制類即可
指定語法:throttle_classes = ["頻率限制類", ]
"""

好了,就到這里吧.

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python list元素為tuple時的排序方法

    python list元素為tuple時的排序方法

    下面小編就為大家分享一篇python list元素為tuple時的排序方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python數(shù)據(jù)正態(tài)性檢驗實現(xiàn)過程

    Python數(shù)據(jù)正態(tài)性檢驗實現(xiàn)過程

    這篇文章主要介紹了Python數(shù)據(jù)正態(tài)性檢驗實現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • python快速編寫單行注釋多行注釋的方法

    python快速編寫單行注釋多行注釋的方法

    在本篇文章里小編給大家整理的是關(guān)于python快速編寫單行注釋多行注釋的方法,有此需要的朋友們可以參考學(xué)習(xí)下。
    2019-07-07
  • 詳解基于django實現(xiàn)的webssh簡單例子

    詳解基于django實現(xiàn)的webssh簡單例子

    這篇文章主要介紹了基于 django 實現(xiàn)的 webssh 簡單例子,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Python簡單操作sqlite3的方法示例

    Python簡單操作sqlite3的方法示例

    這篇文章主要介紹了Python簡單操作sqlite3的方法,結(jié)合實例形式分析了Python針對sqlite3數(shù)據(jù)庫的讀取、創(chuàng)建、增刪改查等基本操作技巧,需要的朋友可以參考下
    2017-03-03
  • python實現(xiàn)上傳樣本到virustotal并查詢掃描信息的方法

    python實現(xiàn)上傳樣本到virustotal并查詢掃描信息的方法

    這篇文章主要介紹了python實現(xiàn)上傳樣本到virustotal并查詢掃描信息的方法,是比較實用的技巧,需要的朋友可以參考下
    2014-10-10
  • Python中random.shuffle()函數(shù)用法代碼案例

    Python中random.shuffle()函數(shù)用法代碼案例

    random.shuffle方法,對元素進(jìn)行重新排序,打亂原有的順序,返回一個隨機序列,該方法的作用類似洗牌,本文重點給大家介紹Python中random.shuffle()函數(shù)用法代碼案例,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • python實現(xiàn)可視化動態(tài)CPU性能監(jiān)控

    python實現(xiàn)可視化動態(tài)CPU性能監(jiān)控

    這篇文章主要為大家詳細(xì)介紹了python可視化動態(tài)CPU性能監(jiān)控,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python 列表的清空方式

    Python 列表的清空方式

    今天小編就為大家分享一篇Python 列表的清空方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python基于搜索引擎實現(xiàn)文章查重功能

    python基于搜索引擎實現(xiàn)文章查重功能

    這篇文章主要介紹了python基于搜索引擎實現(xiàn)文章查重功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05

最新評論

潼南县| 叶城县| 普定县| 广州市| 顺平县| 墨玉县| 昆明市| 烟台市| 阜新| 湛江市| 万源市| 鹤岗市| 巴楚县| 德安县| 文安县| 阳新县| 腾冲县| 辽中县| 抚顺县| 武陟县| 甘孜县| 海城市| 浮山县| 延吉市| 南丹县| 砚山县| 白银市| 应用必备| 老河口市| 陇西县| 富民县| 大新县| 洞头县| 丰原市| 五指山市| 郓城县| 唐海县| 岳阳市| 海淀区| 马山县| 张北县|