# 对应视图文件 views.py
#***频率组件****
from rest_framework.throttling import BaseThrottle
VISIT_RECORD={}
class VisitThrottle(BaseThrottle):
def __init__(self):
self.history=None
def allow_request(self,request,view):
remote_addr = request.META.get('REMOTE_ADDR')
print('请求的IP:',remote_addr)
import time
ctime=time.time()
if remote_addr not in VISIT_RECORD:
VISIT_RECORD[remote_addr]=[ctime,]
return True
history=VISIT_RECORD.get(remote_addr)
self.history=history
while history and history[-1]<ctime-60:
history.pop()
if len(history)<5: # 设一分钟内访问频率
history.insert(0,ctime)
return True
else:
return False
def wait(self):
import time
ctime=time.time()
return 60-(ctime-self.history[-1])
class UserInfo(APIView):
# 加上用户验证 携带正确token时就会有user,否则就是AnonymousUser 就是没有用户的状态
authentication_classes = (JWTAuthentication,)
# 限制一分钟内ip的访问频率
throttle_classes = [VisitThrottle]
def get(self,request):
request_log(request)
try:
if not request.auth:
return Response({"message": "请先登录", "errorCode": 2, "data": {}})
user = User.objects.filter(id=request.user.id,is_delete=False).first()
serializer_user_data = UserSerializer(user)
json_data = {"message": "ok", "errorCode": 0, "data": {}}
json_data['data'] = serializer_user_data.data
return Response(json_data)
except Exception as e:
print(e)
return Response({"message": "未知错误", "errorCode": 1, "data": {}})
django-drf 控制ip访问频率
最新推荐文章于 2023-05-09 20:00:27 发布