Django/flask请求频率限制(基于ratelimit)

django-ratelimit

安装
pip3 install django-ratelimit
FBV使用方式
from ratelimit.decorators import ratelimit


@ratelimit(key='ip', rate='5/m', block=True)
def myview(request):
    # 同一IP每分钟访问超过5次,会被限制
    return HttpResponse()
CBV使用方式
  1. 使用装饰器的方式
from django.utils.decorators import method_decorator

class MyView(View):
    @method_decorator(ratelimit(key='ip', rate='1/m', method='GET', block=True))
    def get(self, request):
        pass

@method_decorator(ratelimit(key='ip', rate='1/m', method='GET', block=True), name='get')
class MyOtherView(View):
    def get(self, request):
        pass

2.url的方式

from ratelimit.decorators import ratelimit

urlpatterns = [
    path('/', ratelimit(key='ip', method='GET', rate='1/m', block=True)(MyView.as_view())),
]

flask-ratelimit

安装
pip3 install flask-limiter
FBV使用方式
from flask import Flask
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

app = Flask(__name__)
limiter = Limiter(
    app,
    key_func=get_remote_address,
    default_limits=["10 per day", "5 per hour"]
)
@app.route("/func1")
@limiter.limit("1 per day")
def func1():
    pass

@app.route("/func2")
@limiter.limit("1/second", override_defaults=False)
def func2():
    pass

@app.route("/func3")
def func3():
    pass

@app.route("/func4")
@limiter.exempt
def func4():
    pass

默认经过请求的remote_address进行限制。
默认限制为10/天,5/小时;适用于全部路线
func1路由的限制将绕过默认的速率限制,为1/天
func2路由继承默认限制,并增长了1/秒的限制
func4路由不受任何默认速率限制的约束
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值