如何在 Django 中使用 URL 包装器来限制访问速率?
要在 Django 中使用 URL 包装器来限制访问速率,可以使用 Django 的 ratelimit 库。这个库提供了一个装饰器 ratelimit(key, rate, block=False)
,可以限制指定时间间隔内请求的次数。
具体实现方法如下:
首先,安装 ratelimit 库:
pip install django-ratelimit
然后,在 settings.py
文件中添加 'ratelimit'
到 INSTALLED_APPS
列表中:
# settings.py INSTALLED_APPS = [ # ... 'ratelimit', # ... ]
接下来,在视图函数或类视图中使用 ratelimit
装饰器,指定限制条件,例如:
# views.py from ratelimit.decorators import ratelimit @ratelimit(key='user', rate='10/h', block=True) def my_view(request): # ...
上面的示例中,key
参数指定了限制条件的键,可以是 IP 地址、用户名等,用于识别请求方。rate
参数指定了限制条件,例如 10/h
表示该限制条件下每小时只允许请求 10 次。block
参数指定当超出限制条件时是否禁止访问,默认为 False,如果为 True,则会返回 HTTP 429 Too Many Requests 状态码。
需要注意的是,ratelimit
装饰器只能限制在同一进程内的请求,如果要限制全局的请求速率,可以考虑使用相关的 CDN 服务或者反向代理服务器。
完整的示例代码如下:
# views.py from django.shortcuts import render from ratelimit.decorators import ratelimit @ratelimit(key='user', rate='10/h', block=True) def index(request): return render(request, 'index.html', {'message': 'Welcome to pidancode.com!'})
# urls.py from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ]
在上面的示例中,访问网站时,只允许每个用户每小时最多请求 10 次,超过限制会返回 HTTP 429 状态码。
相关文章