Django REST framework 如何實(shí)現(xiàn)內(nèi)置訪問(wèn)頻率控制
對(duì)匿名用戶(hù)采用 IP 控制訪問(wèn)頻率,對(duì)登錄用戶(hù)采用 用戶(hù)名 控制訪問(wèn)頻率。
from rest_framework.throttling import SimpleRateThrottle class VisitThrottle(SimpleRateThrottle): """匿名用戶(hù)訪問(wèn)頻率限制""" scope = "AnonymousUser" # 隨便寫(xiě)的,可以作為key保存在緩存中 def get_cache_key(self, request, view): return self.get_ident(request) class UserThrottle(SimpleRateThrottle): """登錄用戶(hù)訪問(wèn)頻率限制""" 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": "密碼", } } }
匿名用戶(hù)的訪問(wèn)頻率限制,這里設(shè)置在全站下,如下:
REST_FRAMEWORK = { "DEFAULT_THROTTLE_CLASSES": ["appxx.utils.VisitThrottle"], "DEFAULT_THROTTLE_RATES":{ "AnonymousUser": "3/m", # 匿名用戶(hù)一分鐘可以訪問(wèn)3次,秒(s)、分(m)、時(shí)(h)、天(d) "LoginUser": "10/m", # 登錄用戶(hù)一分鐘可以訪問(wèn)10次 } }
登錄用戶(hù)的訪問(wèn)頻率設(shè)置在單獨(dú)的視圖中,而視圖依賴(lài)身份認(rèn)證才能辨別用戶(hù)是否登陸了,所以設(shè)置如下:
class BookViewSet(viewsets.ModelViewSet): authentication_classes = [TokenAuthentication] throttle_classes = [UserThrottle] queryset = models.Book.objects.all() serializer_class = serializers.BookSerializer
用戶(hù)身份認(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)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用Python制作一個(gè)批量查詢(xún)搜索排名工具
這篇文章主要為大家詳細(xì)介紹了如何使用Python制作一個(gè)批量查詢(xún)搜索排名工具,并且不需要花費(fèi)任何費(fèi)用,裝上python開(kāi)發(fā)環(huán)境即可,需要的可以參考一下2023-06-06Python配置pip國(guó)內(nèi)鏡像源的實(shí)現(xiàn)
這篇文章主要介紹了Python配置pip國(guó)內(nèi)鏡像源的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Python中使用裝飾器時(shí)需要注意的一些問(wèn)題
這篇文章主要介紹了Python中使用裝飾器時(shí)需要注意的一些問(wèn)題,裝飾器是Python學(xué)習(xí)進(jìn)階中的重要知識(shí)點(diǎn),需要的朋友可以參考下2015-05-05Python xlwings插入Excel圖片的實(shí)現(xiàn)方法
這篇文章主要介紹了Python xlwings插入Excel圖片的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02python對(duì)網(wǎng)頁(yè)文本的格式化實(shí)例方法
在本篇文章里小編給大家整理是一篇關(guān)于python對(duì)網(wǎng)頁(yè)文本的格式化實(shí)例方法,有興趣的朋友們可以跟著學(xué)習(xí)參考下。2021-10-10