安装:pip install Flask-Limiter
代码:
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=["200 per day", "50 per hour"]
)
@app.route("/slow")
@limiter.limit("1 per day")
def slow():
return ":("
@app.route("/medium")
@limiter.limit("1/second", override_defaults=False)
def medium():
return ":|"
@app.route("/fast")
def fast():
return ":)"
@app.route("/ping")
@limiter.exempt
def ping():
return "PONG"
上诉频率限制说明:
- 默认通过请求的
remote_address
进行限制。 - 默认限制为200次/天,50次/小时;适用于所有路线
- slow路由的限制将绕过默认的速率限制,为1次/天
- medium路由继承默认限制,并增加了1次/秒的限制
- ping路由不受任何默认速率限制的约束
(注意: 静态路由不受速率限制 )
每次请求超出速率限制时,将不会调用view函数,而是会引发429
http错误。