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-08Python xlwings插入Excel圖片的實(shí)現(xiàn)方法
這篇文章主要介紹了Python xlwings插入Excel圖片的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02python對網(wǎng)頁文本的格式化實(shí)例方法
在本篇文章里小編給大家整理是一篇關(guān)于python對網(wǎng)頁文本的格式化實(shí)例方法,有興趣的朋友們可以跟著學(xué)習(xí)參考下。2021-10-10