今天访问网站的时候发现访问的过于频繁被人限制访问次数了,于是我决定自己也玩玩限制次数。
其实直接拿Redis实现就好,不过这里我就不用redis了,我用的是flask-limiter。
文档在这里: FlaskLimiter。
如果不想读英语的话,可以看一下这位博主写的Flask-Limit使用详细说明,很不错。
我这里就只写简单的应用了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| from flask import Flask, make_response, request, url_for from flask_limiter import Limiter from flask_limiter.util import get_remote_address
app = Flask(__name__)
limiter = Limiter(key_func=get_remote_address, default_limits=["300 per day", "5 per hour"]) limiter.init_app(app=app)
@app.route("/slow", methods=["GET"])
@limiter.limit(["5 per day", "5 per hour"]) def slow(): return ":("
@app.errorhandler(429) def over_per(code): return "Your Request too fast."
|
key_func是获取ip地址的函数,这是get_remote_address()的源码:
1 2 3 4 5 6 7
| def get_remote_address(): """ :return: the ip address for the current request (or 127.0.0.1 if none found)
""" return request.remote_addr or '127.0.0.1'
|
如果用Nginx的话就得自定义方法了。
这次我又写注释了,所以就不解释了。
本篇完。