flask-limiter限制单个IP访问的频率和次数

  Flask-Limiter provides rate limiting features to flask routes. It has support for a configurable backend for storage with current implementations for in-memory, redis and memcache. Flask-Limiter对flask的路由功能提供访问速率限制的功能。访问的信息可以存储到应用本身的内存里,或者存储到redis、memcache里

  

举例demo:

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,   //根据访问者的IP记录访问次数
    default_limits=["200 per day", "50 per hour"]  //默认限制,一天最多访问200次,一小时最多访问50次
)
@app.route("/slow")
@limiter.limit("1 per day")  //自定义访问速率
def slow():
    return "24"

@app.route("/fast")        //默认访问速率
def fast():
    return "42"

@app.route("/ping")
@limiter.exempt      //无访问速率限制
def ping():
    return "PONG"

效果:

$ curl localhost:5000/fast
42
$ curl localhost:5000/fast
42
$ curl localhost:5000/fast
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>429 Too Many Requests</title>
<h1>Too Many Requests</h1>
<p>2 per 1 minute</p>
$ curl localhost:5000/slow
24
$ curl localhost:5000/slow
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>429 Too Many Requests</title>
<h1>Too Many Requests</h1>
<p>1 per 1 day</p>
$ curl localhost:5000/ping
PONG
$ curl localhost:5000/ping
PONG
$ curl localhost:5000/ping
PONG
$ curl localhost:5000/ping
PONG

注释:

The built in flask static files routes are also exempt from rate limits.

即静态文件的访问无速率限制

文档说明:http://flask-limiter.readthedocs.io/en/stable/

github地址:https://github.com/alisaifee/flask-limiter

参考:

1、https://www.helplib.com/GitHub/article_107460

2、https://www.jianshu.com/p/dd29529b06d9

3、

4、

原文地址:https://www.cnblogs.com/shengulong/p/9019336.html