如何将所有端点标记为@login_required

时间:2014-11-28 12:19:28

标签: flask flask-login

我正在为我的应用程序使用flask-login插件,它已经在很大程度上开发了。

我想将所有url端点标记为" @ login_required"。

Is there any way I can do this in one place with a single line of code
rather than marking every view function with @login_required.

1 个答案:

答案 0 :(得分:2)

您可以定义自己的装饰器。 Matt Wright's overholt template提供的example完全符合您的要求。

from functools import wraps

from flask_security import login_required

def route(bp, *args, **kwargs):
    def decorator(f):
        @bp.route(*args, **kwargs)
        @login_required
        @wraps(f)
        def wrapper(*args, **kwargs):
            return f(*args, **kwargs)
        return f

    return decorator

您可以use this decorator将路线添加到蓝图使用的任何端点,而不是直接使用蓝图的route装饰器。

bp = Blueprint('name', __name__)

@route(bp, '/')
def route1():
    return 'Hello, world!'