django限制每分钟的请求数

时间:2015-03-28 18:52:48

标签: python django request

我试图限制来自IP的请求数量,以防我收到太多请求。

例如:如果我每分钟会得到超过50个请求,我想阻止它 IP 5分钟。

当我使用request.META['REMOTE_ADDR']时,我总是得到本地主机的IP而不是发送请求的IP。

  1. 如何获取发送请求的计算机的IP?
  2. 如何限制该IP不发送更多X时间请求?

2 个答案:

答案 0 :(得分:4)

django-ratelimite会限制您在指定时间内收到的请求数量。

安装:

pip install django-ratelimit

在您的观点中:

from ratelimit.decorators import ratelimit

@ratelimit(key='ip', rate='10/m')
def myview(request):
...

答案 1 :(得分:0)

1.我如何获得发送请求的计算机的IP?

def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip

>>>get_client_ip(request)
"client ip"

2.我可以如何限制该IP不发送更多的X时间请求?

我认为您可以为此类型设置middleware。比如在数据库中保存请求时间,将相邻请求与之前的请求进行比较等等。

更新自评论

如果您使用nginx作为Web服务器,请尝试此操作 http://nginx.org/en/docs/http/ngx_http_limit_req_module.html