成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > Django REST framework 限流功能的使用

Django REST framework 限流功能的使用

熱門標簽:洪澤縣地圖標注 百度地圖標注位置怎么修改 老人電話機器人 無錫客服外呼系統(tǒng)一般多少錢 北京電信外呼系統(tǒng)靠譜嗎 高德地圖標注是免費的嗎 大連crm外呼系統(tǒng) 地圖標注視頻廣告 梅州外呼業(yè)務(wù)系統(tǒng)

正文開始

先說一個限流這個概念,最早接觸這個概念是在前端。真實的業(yè)務(wù)場景是在搜索框中輸入文字進行搜索時,并不希望每輸一個字符都去調(diào)用后端接口,而是有停頓后才真正的調(diào)用接口。這個功能很有必要,一方面減少前端請求與渲染的壓力,同時減輕后端接口訪問的壓力。類似前端的功能的代碼如下:

// 前端函數(shù)限流示例
function throttle(fn, delay) {
    var timer;
    return function () {
        var _this = this;
        var args = arguments;
        if (timer) {
            return;
        }
        timer = setTimeout(function () {
            fn.apply(_this, args);
            timer = null;
        }, delay)
    }
}

但是后端的限流從目的上來說與前端類似,但是實現(xiàn)上會有所不同,讓我們看看 DRF 的限流。

1. DRF 中的限流

項目配置

# demo/settings.py

REST_FRAMEWORK = {
    # ...
    'DEFAULT_THROTTLE_CLASSES': (
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle',
         'rest_framework.throttling.ScopedRateThrottle',
    ),
    'DEFAULT_THROTTLE_RATES': {
        'anon': '10/day',
        'user': '2/day'
    },
}

# article/views.py

# 基于ViewSet的限流
class ArticleViewSet(viewsets.ModelViewSet, ExceptionMixin):
    """
    允許用戶查看或編輯的API路徑。
    """
    queryset = Article.objects.all()
    # 使用默認的用戶限流
    throttle_classes = (UserRateThrottle,)
    serializer_class = ArticleSerializer

# 基于view的限流
@throttle_classes([UserRateThrottle])

因為我配置的用戶每天只能請求兩次,所以在請求第三次之后就會給出 429 Too Many Requests的異常,具體的異常信息為下一次可用時間為 86398 秒后。

2. 限流進階配置

上述演示的限流配置適用于對用戶的限流,比如我換個用戶繼續(xù)訪問,依然是有兩次的機會。

$ curl -H 'Accept: application/json; indent=4' -u root:root   http://127.0.0.1:8000/api/article/1/ 
{
    "id": 1,
    "creator": "admin",
    "tag": "現(xiàn)代詩",
    "title": "如果",
    "content": "今生今世 永不再將你想起\n除了\n除了在有些個\n因落淚而濕潤的夜里 如果\n如果你愿意"
}

分別介紹一下三種限流類

  • AnonRateThrottle 適用于任何用戶對接口訪問的限制
  • UserRateThrottle 適用于請求認證結(jié)束后對接口訪問的限制
  • ScopedRateThrottle 適用于對多個接口訪問的限制

所以三種不同的類適用于不同的業(yè)務(wù)場景,具體使用根據(jù)不同的業(yè)務(wù)場景選擇,通過配置相對應(yīng) scope 的頻率的配置就可以達到預(yù)期的效果。

3. 限流思路分析

試想一下如果是你編碼實現(xiàn)這個需求應(yīng)該怎么實現(xiàn)?

其實這個功能不難,核心的參數(shù)就是 時間、次數(shù)、使用范圍,下面演示對函數(shù)調(diào)用次數(shù)的限制。

from functools import wraps

TOTAL_RATE = 2

FUNC_SCOPE = ['test', 'test1']


def rate_count(func):
    func_num = {
        # 需要注意函數(shù)名不能重復(fù)
        func.__name__: 0
    }

    @wraps(func)
    def wrapper():
        if func.__name__ in FUNC_SCOPE:
            if func_num[func.__name__] >= TOTAL_RATE:
                raise Exception(f"{func.__name__}函數(shù)調(diào)用超過設(shè)定次數(shù)")
            result = func()
            func_num[func.__name__] += 1
            print(f" 函數(shù) {func.__name__} 調(diào)用次數(shù)為: {func_num[func.__name__]}")
            return result
        else:
            # 不在計數(shù)限制的函數(shù)不受限制
            return func()

    return wrapper


@rate_count
def test1():
    pass


@rate_count
def test2():
    print("test2")
    pass


if __name__ == "__main__":
    try:
        test2()
        test2()
        test1()
        test1()
        test1()
    except Exception as e:
        print(e)
    test2()
    test2()
    
"""
test2
test2
 函數(shù) test1 調(diào)用次數(shù)為: 1
 函數(shù) test1 調(diào)用次數(shù)為: 2
test1函數(shù)調(diào)用超過設(shè)定次數(shù)
test2
test2
"""

這里實現(xiàn)了對函數(shù)調(diào)用次數(shù)的監(jiān)控同時設(shè)置了能夠使用該功能的函數(shù)。當函數(shù)調(diào)用次數(shù)超過設(shè)定閥值久拋出異常。只是這里沒有對時間做限制。

4. 源碼分析

剛才分析了如何實現(xiàn)對函數(shù)調(diào)用次數(shù)的限制,對于一個請求來說可能會復(fù)雜一點,下面就看看 DRF 如何實現(xiàn)的:

class SimpleRateThrottle(BaseThrottle):
   
    # ......
    
    def allow_request(self, request, view):
        """
        Implement the check to see if the request should be throttled.

        On success calls `throttle_success`.
        On failure calls `throttle_failure`.
        """
        if self.rate is None:
            return True

        self.key = self.get_cache_key(request, view)
        if self.key is None:
            return True

        self.history = self.cache.get(self.key, [])
        self.now = self.timer()

        # 根據(jù)設(shè)置時間的限制改變請求次數(shù)的緩存
        while self.history and self.history[-1] = self.now - self.duration:
            self.history.pop()
        # 核心邏輯就是這里判斷請求次數(shù)
        if len(self.history) >= self.num_requests:
            return self.throttle_failure()
        return self.throttle_success()
    
    # ......
    
class UserRateThrottle(SimpleRateThrottle):
    """
    Limits the rate of API calls that may be made by a given user.

    The user id will be used as a unique cache key if the user is
    authenticated.  For anonymous requests, the IP address of the request will
    be used.
    """
    scope = 'user'

    def get_cache_key(self, request, view):
        if request.user.is_authenticated:
            ident = request.user.pk
        else:
            # 考慮到用戶沒有認證的情況 與 AnonRateThrottle 中 key 一致
            ident = self.get_ident(request)
        # 根據(jù)設(shè)置的范圍構(gòu)建緩存的 key
        return self.cache_format % {
            'scope': self.scope,
            'ident': ident
        }

綜上所述:

  • 核心的判斷邏輯依舊是緩存中獲取每個用戶調(diào)用次數(shù),根據(jù)范圍與時間判斷是否超過設(shè)置定的閥值。
  • 不同類型的限流,在緩存 key 的設(shè)計上會有區(qū)別,默認的 key 為請求中REMOTE_ADDR。

5. 其它注意事項

  • 因為這里的實現(xiàn)用到緩存,所以需要注意在多實例部署的情況下需要配置統(tǒng)一的緩存服務(wù)(默認的緩存為 Django 基于內(nèi)存實現(xiàn)的)。
  • 緩存服務(wù)的重啟可能會導(dǎo)致已有的計數(shù)清零,如果有較強的業(yè)務(wù)邏輯需要,還請自己實現(xiàn)限流的邏輯。
  • 如果是自定義的用戶表,需要重寫緩存中 get_cache_key 的邏輯。
  • 如果需要統(tǒng)計分析用戶被限流情況也是需要重新設(shè)計限流的邏輯。
  • 限流的邏輯在生產(chǎn)環(huán)境中慎用,因為會限制用戶使用產(chǎn)品,對用戶不夠友好。

參考資料

DRF 限流
Django 緩存

以上就是Django REST framework 限流功能的使用的詳細內(nèi)容,更多關(guān)于Django REST framework 限流功能的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • Django restframework 框架認證、權(quán)限、限流用法示例
  • DjangoRestFramework 使用 simpleJWT 登陸認證完整記錄
  • Django rest framework如何自定義用戶表
  • 深度解析Django REST Framework 批量操作
  • Python3+PyCharm+Django+Django REST framework配置與簡單開發(fā)教程
  • Django REST Framework 分頁(Pagination)詳解
  • Django restful framework生成API文檔過程詳解
  • 自定義Django_rest_framework_jwt登陸錯誤返回的解決
  • django rest framework使用django-filter用法
  • django restframework serializer 增加自定義字段操作

標簽:怒江 吉林 清遠 岳陽 安慶 洛陽 泉州 長春

巨人網(wǎng)絡(luò)通訊聲明:本文標題《Django REST framework 限流功能的使用》,本文關(guān)鍵詞  Django,REST,framework,限流,功能,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Django REST framework 限流功能的使用》相關(guān)的同類信息!
  • 本頁收集關(guān)于Django REST framework 限流功能的使用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    www.日韩av| www.大网伊人| 成人永久免费视频| 先锋影音av中文资源| 久草视频国产| 日韩理论电影大全| 国产中文字幕久久| 黄色手机在线视频| 亚洲女女做受ⅹxx高潮| 国产精品乱码一区二区视频| 欧美白人猛性xxxxx交69| 黄色成人在线免费观看| 久久久三级国产网站| 午夜激情在线| 欧美阿v一级看视频| a级片国产精品自在拍在线播放| av免费播放网站| 国产精品久久久久白浆| 亚洲乱妇老熟女爽到高潮的片| 97超碰免费在线| 亚洲free性xxxx护士白浆| 一级欧洲+日本+国产| 台湾av在线二三区观看| 51午夜精品国产| 欧美三级一区二区三区| 欧美国产日本视频| 午夜3点看的视频| 欧美日本在线播放| 青青青在线视频播放| 高清成人免费视频| 国产盗摄在线观看| 久久久久久美女精品| 黄色污污视频软件| 成人h动漫精品一区二区无码| 亚洲精品97久久久babes| 18一19gay欧美视频网站| 色姑娘综合av| 成人黄色激情网站| 欧美一区二区视频| 免费一级毛片在线观看| 免费a视频在线观看| 精品免费日产一区一区三区免费| 精品欧美一区二区精品久久| 激情六月婷婷久久| 国产av天堂无码一区二区三区| 欧美一级爆毛片| 亚洲欧美色图片| 日韩精品一区二区久久| 男女日批视频在线观看| 九色国产蝌蚪| 手机在线精品视频| 亚洲欧洲美洲av| 91精品福利观看| 蜜臀av国产精品久久久久| 国产网站免费在线观看| 91福利在线免费| 成功精品影院| 最新中文字幕免费视频| caoporn国产一区二区| 国产毛片一区二区| 国产成人精品久久亚洲高清不卡| 亚洲成人av| 99久久精品国产导航| 欧美日韩精品免费在线观看视频| av大片在线| 亚洲男人av电影| 精品婷婷伊人一区三区三| 国产在线播放精品| 日韩电影免费观看中文字幕| 免费视频一区三区| 欧美久久久久久久| 亚洲毛片av在线| 91免费公开视频| 欧美军人男男激情gay| 亚洲网站啪啪| 国产一区二区精品久| 亚洲av成人精品一区二区三区在线播放| 天天综合网天天做天天受| 很黄很污的视频网站| 熟妇高潮一区二区| 国产精品一区二区三区乱码| av网站大全免费| 日韩视频免费观看高清完整版| 欧美做a欧美| 中文字幕人妻一区二区三区在线视频| 欧美视频一区二区在线观看| 久久精品国产亚洲精品| 亚洲精品国产品国语在线app| 成人高清免费在线播放| 亚洲mv在线观看| av在线无限看| 亚洲欧美乱综合| 久久精品国产亚洲a∨麻豆| 国产极品jizzhd欧美| 久久久久久国产三级电影| 国产免费黄视频在线观看| 中文字幕91视频| 亚洲色在线视频| 精品视频在线一区二区| 亚洲第一天堂av| 亚洲国产一区二区三区a毛片| 亚洲免费中文| 国产成a人亚洲精| 国产精品美女久久久久av爽| 国产亚av手机在线观看| 国产欧美一区二区三区沐欲| 中文字幕一区二区三区四区在线视频| 亚洲无人区码一码二码三码的含义| 免费看涩涩视频| 鲁大师私人影院在线观看| 国产精品美女呻吟| 亚洲一区二区三区四区在线观看| 九九热精品视频在线| 日本中文字幕中出在线| 国产精品久久久久久久久免费看| 男人午夜免费视频| 影视一区二区三区| 国产精品99爱免费视频| 精品无人区一区二区| 国内外成人激情免费视频| 国产亚洲欧美日韩精品| 久久精品一卡二卡| 国产在成人精品线拍偷自揄拍| 亚洲欧美一区二区三区久本道91| 一区二区激情小说| 99久久伊人久久99| 国精产品久拍自产在线网站| 巨胸喷奶水www久久久免费动漫| 亚洲免费在线视频| 亚洲国产精品狼友在线观看| 1024国产精品| 日本韩国欧美一区| 在线观看视频亚洲| 色综合久久久久综合体桃花网| www.色呦呦| 99精品中文字幕在线不卡| 懂色一区二区三区免费观看| 久久久久久久久久一区二区三区| 裸模一区二区三区免费| 国产日韩中文字幕在线| 久久久久久这里只有精品| 一区二区三区产品免费精品久久75| 午夜影院韩国伦理在线| 热久久精品免费视频| 国产精品麻豆免费版现看视频| 国产午夜精品麻豆| 日本一区二区三级电影在线观看| 成人黄色片网站| 男女h黄动漫啪啪无遮挡软件| 亚洲激情婷婷| 在线免费观看日本欧美爱情大片| 无码人妻一区二区三区一| 亚洲欧洲精品一区| **欧美日韩在线| 免费黄频在线观看| 无码人妻丰满熟妇区毛片18| 亚洲一区二区三区免费观看| 欧美日韩性生活片| 五月婷婷综合色| 国产丝袜精品第一页| 亚洲在线免费观看视频| 精品一区二区亚洲| ww国产内射精品后入国产| 久久久久久成人| 欧美视频中文字幕| 国产精品日韩成人| 欧美性色综合网| 日本不卡一区在线| 999在线观看视频| 国产99精品在线观看| 狠狠鲁男人天堂| 欧美日韩免费一区二区三区| 成人无码av片在线观看| 涩爱av色老久久精品偷偷鲁| 亚洲AV无码久久精品国产一区| 一二三四社区欧美黄| 日本三级小视频| 北条麻妃一区二区三区在线| 香蕉视频在线观看网站| 日本精品免费| 91精品人妻一区二区三区| 免费高清av| 不卡一区二区在线观看| 欧美性做爰毛片| 一区二区视频免费| 黄色成人免费网| 免费人成在线观看视频播放| 亚洲综合精品国产一区二区三区| 色av一区二区三区| www.九色在线| 狠狠色狠狠色综合日日tαg| 97在线视频观看| 大j8黑人w巨大888a片| 成人在线免费电影网站| 蜜臀99久久精品久久久久久软件| 日产精品一区二区| 日韩深夜福利网站| 久久精品99久久久| 国产女同无遮挡互慰高潮91| 国产资源精品在线观看| 欧美黑人性生活视频| 色综合久综合久久综合久鬼88| 欧美1o一11sex性hdhd| 亚洲国产日韩一区二区| 78国产伦精品一区二区三区| 亚洲sss视频在线视频| 图片区亚洲欧美小说区| 国产五月天婷婷| 日本jizz中国| 黄网站网址视频| 成人写真福利网| 天天看片天天操| 日韩精品av一区二区三区| 偷偷要91色婷婷| 青柠在线影院观看日本| 丝瓜av网站精品一区二区| 免费在线观看一级毛片| av网站在线免费看| 极品粉嫩饱满一线天在线| 青青草中文字幕| 欧美日免费三级在线| 日韩电影免费观看在线观看| 亚洲福利一区二区三区| 亚洲国产欧美一区二区三区不卡| 国产精品草莓在线免费观看| 粉嫩91精品久久久久久久99蜜桃| 欧美三级电影网址| 中文字幕一区二区人妻痴汉电车| www.男人的天堂.com| 亚洲欧美一区二区激情| 9久re热视频在线精品| 日韩在线观看视频网站| av不卡在线播放| 一级黄色片大全| 日本jizzcom| 99精品女人在线观看免费视频| 91免费版网站在线观看| 欧美va日韩va| 青青草手机视频在线观看| chinese少妇国语对白| 波多野在线播放| 韩国一区二区电影| 亚洲精品久久久久中文字幕二区| 色偷偷av亚洲男人的天堂| 69亚洲精品久久久蜜桃小说| av资源一区二区| 91官网在线| 97在线视频精品| 97福利网站在线观看视频| 国产一级av毛片| 国产黄色在线播放| 91日本视频在线| 真人做人试看60分钟免费| 一区二区三区在线看| 亚洲精品蜜桃久久久久久| 好吊色视频一区二区| 国产成人自拍一区| 人妻互换免费中文字幕| 日本在线不卡视频一二三区| jizz性欧美| 中文字幕一区二区中文字幕| 国产日韩欧美一区二区三区四区| 色在线视频观看| 亚洲天堂黄色| 日韩激情一区二区| 亚洲国产高清在线观看| 亚洲精品国产欧美| 一区二区三区日韩精品视频| 懂色av粉嫩av蜜臀av一区二区三区| 韩日欧美一区| 欧洲视频在线免费观看| 日韩母乳在线| www.蜜臀av| 最新黄色av网址| av三级在线播放| 婷婷av一区二区三区| 福利网站在线观看| 国产a级全部精品| 1234区中文字幕在线观看| av在线dvd| 亚洲成人在线网站| 免费的国产精品| 国产在线精彩视频| 精品国产一区二区三区av性色| 成人影院av| jizzjizz韩国| 色狠狠久久av五月综合| 无码少妇精品一区二区免费动态| 欧美女子与性| 天天干天天操天天做| 精品黑人一区二区三区在线观看| 天堂网中文在线观看| 超碰地址久久| 五月天激情综合网| 亚洲日本国产| 日韩免费av电影| 亚洲成人av片在线观看| 美女视频第一区二区三区免费观看网站| 免费试看一区| 成人爽a毛片免费啪啪动漫| 毛片在线播放视频| 自拍偷拍免费精品| 成人午夜激情影院| 日韩久久一区二区三区| 2023欧美最顶级a∨艳星| 国产欧美日韩另类| 天天色天天操天天| 蜜桃视频在线观看一区二区| 日韩一区二区在线视频| 性一交一乱一伧老太| 女人被狂躁到高潮的免费| 欧美成人黑人| 欧美另类精品xxxx孕妇| 青青青青国产视频| 欧美三级电影网| 色偷偷88888欧美精品久久久| 久久久久久av无码免费网站| 久久久久久久久黄色| 国产精品资源| 国产亚洲欧洲一区高清在线观看| 日韩中文在线视频| 写真福利精品福利在线观看| a视频免费在线观看| 天美星空大象mv在线观看视频| 免费观看黄色av| 91九色02白丝porn| 亚洲第一页自拍| 在线亚洲欧美日韩|