Flask:一次装饰每条路线?

问题描述 投票:16回答:1

我有@login_required装饰器来装饰控制器动作。但是我的应用程序很大,在许多不同的控制器文件中都有大量的路由。一步一步地装饰每条路线似乎容易出错(我很容易错过一条路线)并且很费时间。

有没有一种方法可以装饰整个应用程序中的所有路由?

我正在将身份验证从Web服务器(apache)转移到应用程序级别,这就是我遇到此问题的原因。

python flask flask-login login-required
1个回答
20
投票

您可以采取相反的方式,默认情况下使用before_request装饰器要求登录,并使用自定义装饰器标记需要not需要登录的路由,例如:

_insecure_views = []

@my_blueprint.before_request
def require_login():
    if request.endpoint in _insecure_views:
        return
    # check for login here

def login_not_required(fn):
    '''decorator to disable user authentication'''
    endpoint = ".".join([some_blueprint.name, fn.func_name])
    _insecure_views.append(endpoint)
    return fn

@some_blueprint.route('/')
@login_not_required
def index():
    pass

您可能将其包装到自己的派生蓝图/ Flask类中。

编辑:基本上是Best way to make Flask-Login's login_required the default

© www.soinside.com 2019 - 2024. All rights reserved.