Django中间件限制用户每分钟访问次数不超过10次,一般用于反爬

不会具体使用,请参考:

https://www.cnblogs.com/apollo1616/articles/9892104.html

具体代码如下:

# 限制用户访问次数,每60秒不超过10次
visit_ip_pool = {}
class AccessLimitMiddleWare(MiddlewareMixin):
    def process_request(self, request):
        ip = request.META.get("REMOTE_ADDR")

        visit_time = time.time()
        if ip not in visit_ip_pool:
            visit_ip_pool[ip] = [visit_time]
        else:
            visit_ip_pool[ip].insert(0, visit_time)
        ip_lst = visit_ip_pool[ip]
        timecha = ip_lst[0] - ip_lst[-1]
        print('BEFORE:', ip, '数量:', len(ip_lst), '时间差', timecha)
        # 如果列表没有值,pop()会报错
        # IndexError: pop from empty list
        while ip_lst and timecha > 60:
            ip_lst.pop()
        if len(ip_lst) > 10:
            return HttpResponse("访问过于频繁...")
        print('BEFORE:', ip, '数量:', len(ip_lst), '时间差', timecha)

 

转载于:https://www.cnblogs.com/apollo1616/articles/9892130.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值