Django REST framework 如何實(shí)現(xiàn)內(nèi)置訪問頻率控制
更新時間:2019年07月23日 14:22:45 作者:little_pd
這篇文章主要介紹了Django REST framework 內(nèi)置訪問頻率控制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
對匿名用戶采用 IP 控制訪問頻率,對登錄用戶采用 用戶名 控制訪問頻率。
from rest_framework.throttling import SimpleRateThrottle
class VisitThrottle(SimpleRateThrottle):
"""匿名用戶訪問頻率限制"""
scope = "AnonymousUser" # 隨便寫的,可以作為key保存在緩存中
def get_cache_key(self, request, view):
return self.get_ident(request)
class UserThrottle(SimpleRateThrottle):
"""登錄用戶訪問頻率限制"""
scope = "LoginUser"
def get_cache_key(self, request, view):return request.user
可以配置redis
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100}
# "PASSWORD": "密碼",
}
}
}
匿名用戶的訪問頻率限制,這里設(shè)置在全站下,如下:
REST_FRAMEWORK = {
"DEFAULT_THROTTLE_CLASSES": ["appxx.utils.VisitThrottle"],
"DEFAULT_THROTTLE_RATES":{
"AnonymousUser": "3/m", # 匿名用戶一分鐘可以訪問3次,秒(s)、分(m)、時(h)、天(d)
"LoginUser": "10/m", # 登錄用戶一分鐘可以訪問10次
}
}
登錄用戶的訪問頻率設(shè)置在單獨(dú)的視圖中,而視圖依賴身份認(rèn)證才能辨別用戶是否登陸了,所以設(shè)置如下:
class BookViewSet(viewsets.ModelViewSet): authentication_classes = [TokenAuthentication] throttle_classes = [UserThrottle] queryset = models.Book.objects.all() serializer_class = serializers.BookSerializer
用戶身份認(rèn)證如下:
from rest_framework import authentication
from rest_framework import exceptionsfrom appxx import models
class TokenAuthentication(authentication.BaseAuthentication):
"""身份認(rèn)證"""
def authenticate(self, request):
token = request.GET.get("token")
obj = models.UserAuthToken.objects.filter(token=token).first()
if not obj:
raise exceptions.AuthenticationFailed("驗(yàn)證失??!")
else:
return (obj.user.username, obj.token)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python配置pip國內(nèi)鏡像源的實(shí)現(xiàn)
這篇文章主要介紹了Python配置pip國內(nèi)鏡像源的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Python xlwings插入Excel圖片的實(shí)現(xiàn)方法
這篇文章主要介紹了Python xlwings插入Excel圖片的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
python對網(wǎng)頁文本的格式化實(shí)例方法
在本篇文章里小編給大家整理是一篇關(guān)于python對網(wǎng)頁文本的格式化實(shí)例方法,有興趣的朋友們可以跟著學(xué)習(xí)參考下。2021-10-10

