Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

Gray-Ice

个人博客兼个人网站

今天访问网站的时候发现访问的过于频繁被人限制访问次数了,于是我决定自己也玩玩限制次数。
其实直接拿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
# 一天可以请求300次,一个小时可以请求5次
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"])
# 一天可以请求5次,一个小时可以请求5次(这两者并不冲突)
@limiter.limit(["5 per day", "5 per hour"])
def slow():
return ":("

# 当请求次数到达阀值后(超速后),会触发429状态码,所以我们可以在这里通知用户超速了(如果不定义的话,limiter会自己返回一个提示)
@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的话就得自定义方法了。
这次我又写注释了,所以就不解释了。
本篇完。

评论



愿火焰指引你