可以對介面訪問的頻次進行限制,以減輕伺服器壓力。
一般用於付費購買次數,投票等場景使用.
可以在配置檔案中,使用default_throttle_classes
和default_throttle_rates
進行全域性配置,
rest_framework =
}
default_throttle_rates
可以使用second
,minute
,hour
或day
來指明週期。
原始碼:
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...