这里简单介绍了一些使用flask_limiter的方法。具体详细可参考官方文档
https://flask-limiter.readthedocs.io/en/stable/
pip install flask_socketio
from flask import Flask
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
app = Flask(__name__)
limiter = Limiter(
get_remote_address,
app=app,
default_limits=["200 per day", "50 per hour"], # 这里是所有接口的默认访问上限限制
)
在想要限制访问速率的函数前面加上装饰器,里面写限制规则,例如1 per day、1/second
示例:
@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"
例如.limit(“100/day;10/hour;1/minute”)可以使用limiter单个装饰器设置多条规则
也可以使用多个装饰器设置多条规则
可以使用.limit(“100/day”, my_key_func)的方式调用自己的处理函数
@limiter.limit("100/day;10/hour;1/minute")
def my_route():
pass
@limiter.limit("100/day")
@limiter.limit("10/hour")
@limiter.limit("1/minute")
def my_route():
pass
def my_key_func():
pass
@limiter.limit("100/day", my_key_func)
def my_route():
pass
如果不希望使用装饰器,可以使用try加在函数里,捕获异常返回429
@app.route("/")
def route():
try:
with limiter.limit("10/second"):
# something expensive
except RateLimitExceeded: pass