DRF之限流元件

2021-10-10 08:36:20 字數 2874 閱讀 4095

可以對介面訪問的頻次進行限制,以減輕伺服器壓力。

一般用於付費購買次數,投票等場景使用.

可以在配置檔案中,使用default_throttle_classesdefault_throttle_rates進行全域性配置,

rest_framework =

}

default_throttle_rates可以使用second,minute,hourday來指明週期。

原始碼:

m表示分鐘,可以寫m,也可以寫minute

也可以在具體檢視中通過throttle_classess屬性來配置,如

from rest_framework.throttling import userratethrottle

from rest_framework.views import apiview

class

exampleview

(apiview)

: throttle_classes =

(userratethrottle,

)#區域性配置..

.

1) anonratethrottle

限制所有匿名未認證使用者,使用ip區分使用者。

使用default_throttle_rates['anon']來設定頻次

2)userratethrottle

限制認證使用者,使用user id 來區分。

使用default_throttle_rates['user']來設定頻次

3)scopedratethrottle (待定…)

限制使用者對於每個檢視的訪問頻次,使用ip或user id,先找的使用者id,沒有設定使用者id的話就會使用ip位址。

例如: 全域性

class contactlistview(apiview):

throttle_scope = 'contacts'

...class contactdetailview(apiview):

throttle_scope = 'contacts'

...class uploadview(apiview):

throttle_scope = 'uploads'

...rest_framework =

}

全域性配置中設定訪問頻率

'default_throttle_rates'

:

from rest_framework.authentication import sessionauthentication

from rest_framework.permissions import isauthenticated

from rest_framework.generics import retrieveapiview

from rest_framework.throttling import userratethrottle

class

studentapiview

(retrieveapiview)

: queryset = student.objects.

all(

) serializer_class = studentserializer

authentication_classes =

[sessionauthentication]

permission_classes =

[isauthenticated]

throttle_classes =

(userratethrottle,

)

scopedratethrottle區域性使用示例

settings.py內容

'default_throttle_rates':,

views.py內容

from rest_framework.throttling import scopedratethrottle

class

studentapiview

(listapiview)

: queryset = models.student.objects.

all(

) serializer_class = studentmodelserializer

throttle_classes =

[scopedratethrottle,

] throttle_scope =

'xx'

class

studentapi2view

(listapiview)

: queryset = models.student.objects.

all(

) serializer_class = studentmodelserializer

throttle_classes =

[scopedratethrottle,

] throttle_scope =

'oo'

urls.py內容

path(r'students/'

,views.studentapiview.as_view())

, path(r'students2/'

,views.studentapi2view.as_view())

,

DRF之異常處理元件

看乙個簡單的示例 class apierror exception pass class student2apiview apiview def get self,request,pk try instance student.objects.get pk pk except student.doe...

drf元件之jwt認證

全稱 json web token 解釋 加密字串的原始資料是json,後台產生,通過web傳輸給前台儲存 格式 三段式 頭.載荷.簽名 頭和載荷用的是base64可逆加密,簽名用md5不可逆加密 內容 頭 基礎資訊,也可以為空 加密方式 公司資訊 專案組資訊 載荷 核心資訊 使用者資訊 過期時間 ...

DRF之解析器元件

django 原生解析器 from django.core.handlers.wsgi import wsgirequest post property get post,set post 找 def load post and files self 函式,判斷型別,然後進行解析封裝。只支援 con...