如何对每个用户的Flask应用程序进行评分限制



https://flask-limiter.readthedocs.io/en/stable/

我正在查看Flask Limiter的文档,但我无法找到如何对每个用户进行评分限制,因为一切都是全球性的。例如,与其将其设置为所有用户最多200次请求,我如何才能让单个用户每天200次请求?(IP,或任何其他我不知道使用了什么的标识)

我在食谱中发现了这一点:

当前用户限制路由的速率(使用Flask登录):

@route("/test")
@login_required
@limiter.limit("1 per day", key_func = lambda : current_user.username)
def test_route():
return "42"

更新:添加了简单的示例

这里有一个简单的Flask应用程序来实现配方,给你更好的想法:


from flask import Flask, redirect
from flask_login import (
LoginManager, 
UserMixin, 
current_user, 
login_required,
login_user, 
logout_user
)
from flask_limiter import Limiter                    
app = Flask(__name__)
# flask-login
app.secret_key = 'super secret string' 
login_manager = LoginManager()
login_manager.init_app(app)
# flask-limiter
limiter = Limiter(app)
# user class
class User(UserMixin):
def __init__(self, id):
self.id = id
self.username = id
# memory storage
users = [User('user')]
@login_manager.user_loader
def load_user(user_id):
return users[0]
@app.route('/')
def index():
return 'Hello, World!'
@app.route('/login')
def login():
if not current_user.is_authenticated:
login_user(users[0])
return redirect('/secured')
@app.route('/logout')
@login_required
def logout():
logout_user()
return redirect('/')
@app.route('/secured')
@login_required
@limiter.limit("2 per day", key_func = lambda : current_user.username)
def secured():
return f"Hello, {current_user.id}"
if __name__ == '__main__':    
app.run()

最新更新