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

Django限制API訪問頻率常用方法解析

 更新時間:2020年10月12日 11:58:27   作者:傻白甜++  
這篇文章主要介紹了Django限制API訪問頻率常用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

需求描述:

平臺中需要編寫接口供第三方調(diào)用,需要控制調(diào)用頻率,需求為5s內(nèi)調(diào)用一次后不得再次調(diào)用。

解決思路

1.Django官方插件庫中有個django-ratelimit插件可以滿足要求, django-ratelimit文檔地址,很靈活很強(qiáng)大。只需要在我們的views函數(shù)上加上

@ratelimit(key='ip', rate='1/30s', block=True)
裝飾器就可以了,網(wǎng)站上的資料不多,大部分都是英文的。在這里稍微解釋下參數(shù):

key='ip', 必填項(xiàng),標(biāo)識按照IP劃分,我理解的是同一IP,遵循后面參數(shù)設(shè)定的規(guī)則。

rate='1/30s',必填項(xiàng),設(shè)置的頻率值,這個意思是30秒內(nèi)執(zhí)行一次,也可以按照 “分”,“時”,“日” 等劃分,很靈活的配置,比如每分鐘執(zhí)行5次,可以這樣寫rate='5/m',這里參考文檔足夠弄明白

block=True,在這里吃了個虧,默認(rèn)是False,加上了裝飾器沒寫該參數(shù),訪問不受限制,沒有達(dá)到間隔時間內(nèi)不能再訪問的預(yù)期效果,果斷回去翻文檔,

谷歌翻譯:False是否阻止請求而不是注釋。

我理解大概的意思是,當(dāng)訪問進(jìn)來的時候是否去阻止它,把block=True之后,在次測試訪問,可以看到403,確實(shí)是阻止了。

還有其它的參數(shù),有更多需求的話可以看看,這是其一。

2.通過session存儲訪問時間

這里其實(shí)有兩種方式,第一是寫在中間件中,第二是裝飾器,每個人需求不一樣,我這一大堆函數(shù)就幾個需要給外部調(diào)用的,干脆就做了裝飾器,先貼碼:

def limit(seconds = 5):
'''
@func: 限制訪問頻率裝飾器
'''
def rate_limit(func):
def func_limit(request):
now=time.time()
request_time = request.session.get('request_time',0)
interval_time = int(now - request_time)
if interval_time < seconds:
ret = ret_content(20008,'%s 秒后可再次訪問'%(seconds-interval_time))
return JsonResponse(ret)
else:
request.session['request_time'] = time.time()
ret = func(request)
return ret
return func_limit
return rate_limit
def ret_content(ret_code,message):
return {'ret_code':ret_code,'message':message}

大概思路是:將當(dāng)前訪問的時間存session,設(shè)置時間間隔,當(dāng)在時間間隔之內(nèi)的時候,不讓其刷新,并返回json,超過時間間隔,更新session,讓其執(zhí)行。使用如下:

@limit(seconds=30)

30s內(nèi)執(zhí)行一次,我這個乞丐版的沒第一種方法靈活了,不過在禁止期間返回的結(jié)果值會比較友好,不是403。程序處理會比較方便,另外針對IP的情況,我這里沒做處理,需要的話自己可以改改,把request_time換成IP + Salt方式就可以了。

外部IP地址獲取代碼這里也貼出來:

def get_remote_cli_ip(request):
'''
@func:獲取客戶端ip
'''
ip = request.META.get('HTTP_X_FORWARDED_FOR',0)
if ip == 0:
return request.META['REMOTE_ADDR']
else:
return ip

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

相關(guān)文章

  • 使用python腳本檢查ssl證書到期時間

    使用python腳本檢查ssl證書到期時間

    這篇文章主要為大家介紹了使用python腳本檢查ssl證書到期時間,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 一篇文章帶你了解python標(biāo)準(zhǔn)庫--sys模塊

    一篇文章帶你了解python標(biāo)準(zhǔn)庫--sys模塊

    這篇文章主要介紹了Python標(biāo)準(zhǔn)庫之Sys模塊使用詳解,本文講解了使用sys模塊獲得腳本的參數(shù)、處理模塊、使用sys模塊操作模塊搜索路徑、使用sys模塊查找內(nèi)建模塊、使用sys模塊查找已導(dǎo)入的模塊等使用案例,需要的朋友可以參考下
    2021-08-08
  • python?spotlight庫簡化交互式方法探索數(shù)據(jù)分析

    python?spotlight庫簡化交互式方法探索數(shù)據(jù)分析

    這篇文章主要為大家介紹了python?spotlight庫簡化的交互式方法探索數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python學(xué)習(xí)筆記之json模塊和pickle模塊

    Python學(xué)習(xí)筆記之json模塊和pickle模塊

    json和pickle模塊是將數(shù)據(jù)進(jìn)行序列化處理,并進(jìn)行網(wǎng)絡(luò)傳輸或存入硬盤,下面這篇文章主要給大家介紹了關(guān)于Python學(xué)習(xí)筆記之json模塊和pickle模塊的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Python中的生成器和yield詳細(xì)介紹

    Python中的生成器和yield詳細(xì)介紹

    這篇文章主要介紹了Python中的生成器和yield詳細(xì)介紹,本文講解了列表推導(dǎo)與生成器表達(dá)式、斐波那契數(shù)列、生成器Generator、協(xié)程與yield表達(dá)式、使用生成器與協(xié)程等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • Python3隨機(jī)漫步生成數(shù)據(jù)并繪制

    Python3隨機(jī)漫步生成數(shù)據(jù)并繪制

    這篇文章主要為大家詳細(xì)介紹了Python3隨機(jī)漫步生成數(shù)據(jù)并繪制的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • OpenCV模板匹配matchTemplate的實(shí)現(xiàn)

    OpenCV模板匹配matchTemplate的實(shí)現(xiàn)

    這篇文章主要介紹了OpenCV模板匹配matchTemplate的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • python程序?qū)崿F(xiàn)BTC(比特幣)挖礦的完整代碼

    python程序?qū)崿F(xiàn)BTC(比特幣)挖礦的完整代碼

    這篇文章主要介紹了python程序?qū)崿F(xiàn)BTC(比特幣)挖礦的完整代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 解決windows下python3使用multiprocessing.Pool出現(xiàn)的問題

    解決windows下python3使用multiprocessing.Pool出現(xiàn)的問題

    這篇文章主要介紹了解決windows下python3使用multiprocessing.Pool出現(xiàn)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python元組操作實(shí)例解析

    python元組操作實(shí)例解析

    這篇文章主要介紹了python元組操作,以實(shí)例的形式較為直觀的講述了Python中元組的特點(diǎn)與用法,需要的朋友可以參考下
    2014-09-09

最新評論

雷州市| 锡林浩特市| 云南省| 全南县| 余江县| 吉林省| 银川市| 沂水县| 宁远县| 萝北县| 齐河县| 昌乐县| 蒙城县| 云龙县| 南充市| 靖宇县| 县级市| 莒南县| 旺苍县| 根河市| 邯郸县| 明溪县| 汨罗市| 靖边县| 宜兰县| 琼中| 海盐县| 祥云县| 潞西市| 娱乐| 偏关县| 紫金县| 宝山区| 古田县| 普格县| 越西县| 长阳| 万安县| 巴塘县| 苍梧县| 图木舒克市|