码迷,mamicode.com
首页 > 其他好文 > 详细

framework —— throttles(访问频率控制)

时间:2018-02-06 22:56:08      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:res   post   opened   pat   lis   views   增加   限制   throttle   

framework —— throttles(访问频率控制)

1.目录结构

  技术分享图片

 

2.views.py

技术分享图片
from django.shortcuts import render
from rest_framework.response import Response
from rest_framework.views import APIView
# Create your views here.

RECORD = {
    # "1.1.1.1":[150131516161,]
}

class MyThrottle(object):
    def allow_request(self, request, view):
        """
        Return `True` if the request should be allowed, `False` otherwise.
        a.对匿名用户进行限制:每个用户1分钟允许访问10次
            1.获取用户ip,在request里面。
            2.拿到之后,对它进行限制
            3.怎么限制? 用一个字典来约束限制
            4.如果ip不在字典,就表示新增加的,就加到字典里,以ip为key,时间戳为value。
            5.约束条件:一分钟以内的保留,一分钟以外的剔除
            6.添加时间戳之前限制。判断,加约束条件。
            7.约束条件做完,需要加个长度的约束,长度限制为10
            8.当前时间还需要和最后的时间做个比较,求出等待时间
        放回 false  限制
        返回 true  通行
        """
        import time
        ctime = time.time()
        ip = "1.1.1.1"
        if ip not in RECORD:  #如果不在就表示新添加的ip。
            RECORD[ip] = [ctime,]
        else:
            #time_list = [4505461651651,3505461651651,2505461651651,1505461651651,]
            time_list = RECORD[ip]
            while True:
                val = time_list[-1]  #拿到最后一个值
                if (ctime-60) > val: #时间尾端大于最后一个值
                    time_list.pop()  #最后一个给剔除
                else:                #否则正常运行
                    break
            if len(time_list) >10 :
                return False
            time_list.insert(0,ctime)  #添加时间戳,之前需要做判断,加约束条件
        return True

    def wait(self):
        import time
        ctime = time.time()
        first_out_time = RECORD[1.1.1.1][-1] #取到最后一个时间
        wt = 60 - (ctime - first_out_time) #60秒- (当前时间-第一个出来时间)
        return wt

class LimitView(APIView):
    authentication_classes = []
    permission_classes = []
    throttle_classes = [MyThrottle,]
    def get(self,request,*args,**kwargs):
        self.dispatch
        return Response(控制访问频率示例)
view.py

 

3.urls.py,(只需要添加标红的)

技术分享图片

 

 

验证图:

  技术分享图片

 

framework —— throttles(访问频率控制)

标签:res   post   opened   pat   lis   views   增加   限制   throttle   

原文地址:https://www.cnblogs.com/zhongbokun/p/8424356.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!