不会具体使用,请参考:

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)