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

2024-05-26 10:50:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我正在查看Flask Limitor的文档,我无法找到如何对每个用户的限制进行评级,所有内容都是全局性的。例如,与其将其设置为所有用户最多200个请求,我如何使单个用户每天最多200个请求?(IP或任何其他标识,我不知道使用了什么)


Tags: 用户文档httpsioipflask内容readthedocs
1条回答
网友
1楼 · 发布于 2024-05-26 10:50:00

我在recipes中找到了这个:

Rate limiting a route by current user (using Flask-Login):

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

更新:添加简单示例

下面是一个简单的烧瓶应用程序,它实现了配方,为您提供了更好的想法:


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()


相关问题 更多 >