drf頻率寄悯、過濾、排序

一堕义、自定義頻率類

1猜旬、限制ip訪問的次數(shù)
2、自定義頻率類及使用

#自定義一個(gè)類繼承BaseThrottle
from rest_framework.throttling import BaseThrottle
import time
class MyThrottle(BaseThrottle):
    VISIT_RECORD = {}   # 存用戶訪問信息的大字典
    def __init__(self):
        self.history = None
    def allow_request(self, request, view):
        ip = request.META.get('REMOTE_ADDR')   # (1)取出訪問者ip
        ctime = time.time()
        if ip not in self.VISIT_RECORD:   # # (2)判斷當(dāng)前ip不在訪問字典里倦卖,添加進(jìn)去洒擦,并且直接返回True,表示第一次訪問
            self.VISIT_RECORD[ip] = [ctime,]
            return True
        self.history = self.VISIT_RECORD.get(ip)
        while self.history and ctime-self.history[-1]>60:   # # (3)循環(huán)判斷當(dāng)前ip的列表,有值怕膛,并且當(dāng)前時(shí)間減去列表的最后一個(gè)時(shí)間大于60s熟嫩,把這種數(shù)據(jù)pop掉,這樣列表中只有60s以內(nèi)的訪問時(shí)間褐捻,
            self.history.pop()
        if len(self.history) < 3:
            self.history.insert(0,ctime)
            return True
        else:
            return False   ## (4)判斷掸茅,當(dāng)列表小于3,說明一分鐘以內(nèi)訪問不足三次舍扰,把當(dāng)前時(shí)間插入到列表第一個(gè)位置,返回True希坚,順利通過边苹。當(dāng)大于等于3,說明一分鐘內(nèi)訪問超過三次裁僧,返回False驗(yàn)證失敗
    def wait(self):  # 還剩多長時(shí)間能訪問
        ctime = time.time()
        return 60-(ctime - self.history[-1])

3个束、局部使用以及全局使用

#局部使用,在視圖類中
throttle_classes = [MyAuthen.MyThrottle,]
#全局使用聊疲,在配置文件中
REST_FRAMEWORK = {
        'DEFAULT_THROTTLE_CLASSES':['app01.auth.MyThrottle',],
        }

二茬底、內(nèi)置頻率類使用

#寫一個(gè)類繼承SimpleRateThrottle
from rest_framework.throttling import SimpleRateThrottle
class MySimpleThrottle(SimpleRateThrottle):
    scope = 'xxx'
    def get_cache_key(self,request,view):  
        return self.get_ident(request)  # 以ip限制(返回什么,就以什么為限制)
#在settings.py中配置
REST_FRAMEWORK = {
            'DEFAULT_THROTTLE_RATES' : {
                'xxx':'3/m'   # key跟scope對應(yīng)获洲,value是一個(gè)時(shí)間阱表。3/m指一分鐘限制3次
            }
        }

#全局使用,在配置文件中
REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_RATES': {
        'xxx': '3/m'  # key跟scope對應(yīng)贡珊,value是一個(gè)時(shí)間
    },
    'DEFAULT_THROTTLE_CLASSES': ['app01.MyAuthen.MySimpleThrottle', ],
}
#局部使用最爬,在視圖類中
throttle_classes = [MyAuthen.MySimpleThrottle,]

三、其他內(nèi)置頻率類

1门岔、限制未登錄用戶的頻率(AnonRateThrottle)

#根據(jù)ip限制爱致,局部使用,全局使用
from rest_framework.throttling import SimpleRateThrottle,AnonRateThrottle
#在setting.py中配置
               'DEFAULT_THROTTLE_RATES' : {
                    'anon':'1/m'
                }
2寒随、限制登陸用戶訪問次數(shù)UserRateThrottle
#根據(jù)用戶id限制
#setting.py中配置
        'DEFAULT_THROTTLE_RATES' : {
            'user':'1/m'   # 一分鐘訪問一次
        }

四糠悯、內(nèi)置帮坚,第三方過濾功能

1、內(nèi)置篩選的使用互艾,只能篩選出某個(gè)具體值對應(yīng)的數(shù)據(jù)试和,不推薦使用

from rest_framework.filters import SearchFilter
#視圖類中配置
filter_backends =[SearchFilter,]
search_fields=('name',) # 表模型中的字段
#查詢的時(shí)候
http://127.0.0.1:8000/students/?search=lqz

2、第三方擴(kuò)展的過濾功能
注意:pip3 install django-filter :最新版本(2.4.0)要跟django2.2以上搭配

from django_filters.rest_framework import DjangoFilterBackend
#視圖類中配置
filter_backends = [DjangoFilterBackend,]
filter_fields = ['name','age']
#查詢的時(shí)候
http://127.0.0.1:8000/students/?name=lqz&age=18

五忘朝、排序功能

1灰署、排序

from rest_framework.filters import OrderingFilter
#視圖類中配置
filter_backends =[OrderingFilter,]
ordering_fields=['id','age']
#查詢的時(shí)候
http://127.0.0.1:8000/students/?ordering=-age

2、過濾后再排序

#視圖中配置
filter_backends = [OrderingFilter,DjangoFilterBackend]
ordering_fields = ('id', 'age')
filter_fields=['name','age']
#查詢的時(shí)候
http://127.0.0.1:8000/students/?name=lqz&age=19&ordering=-age,-id
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末局嘁,一起剝皮案震驚了整個(gè)濱河市溉箕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悦昵,老刑警劉巖肴茄,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異但指,居然都是意外死亡寡痰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門棋凳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拦坠,“玉大人,你說我怎么就攤上這事剩岳≌瓯酰” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵拍棕,是天一觀的道長晓铆。 經(jīng)常有香客問我,道長绰播,這世上最難降的妖魔是什么骄噪? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蠢箩,結(jié)果婚禮上链蕊,老公的妹妹穿的比我還像新娘。我一直安慰自己谬泌,他們只是感情好示弓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呵萨,像睡著了一般奏属。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上潮峦,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天囱皿,我揣著相機(jī)與錄音勇婴,去河邊找鬼。 笑死嘱腥,一個(gè)胖子當(dāng)著我的面吹牛耕渴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播齿兔,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼橱脸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了分苇?” 一聲冷哼從身側(cè)響起添诉,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎医寿,沒想到半個(gè)月后栏赴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡靖秩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年须眷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沟突。...
    茶點(diǎn)故事閱讀 40,015評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡花颗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惠拭,到底是詐尸還是另有隱情扩劝,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布求橄,位于F島的核電站今野,受9級(jí)特大地震影響葡公,放射性物質(zhì)發(fā)生泄漏罐农。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一催什、第九天 我趴在偏房一處隱蔽的房頂上張望涵亏。 院中可真熱鬧,春花似錦蒲凶、人聲如沸气筋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宠默。三九已至,卻和暖如春灵巧,著一層夾襖步出監(jiān)牢的瞬間搀矫,已是汗流浹背抹沪。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓤球,地道東北人融欧。 一個(gè)月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像卦羡,于是被迫代替她去往敵國和親噪馏。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容