Flask:一次装饰每条路线?
Flask: Decorate every route at once?
我有 @login_required
装饰控制器动作的装饰器。但是我的应用程序非常大,并且在许多不同的控制器文件中有大量的路由。一条一条地装饰每条路线似乎很容易出错(我很容易错过一条)并且很耗时。
有没有办法一次性装饰整个应用中的所有路线?
我正在将身份验证从 Web 服务器 (apache) 转移到应用程序级别,这就是我遇到这个问题的原因。
你可以反其道而行之,使用 before_request
装饰器来默认要求登录,并使用自定义装饰器来标记 不需要 需要登录的路由,因为示例:
_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
您或许可以将其包装到它自己的派生 blueprint/Flask class 中。
编辑:基本上Best way to make Flask-Login's login_required the default
我有 @login_required
装饰控制器动作的装饰器。但是我的应用程序非常大,并且在许多不同的控制器文件中有大量的路由。一条一条地装饰每条路线似乎很容易出错(我很容易错过一条)并且很耗时。
有没有办法一次性装饰整个应用中的所有路线?
我正在将身份验证从 Web 服务器 (apache) 转移到应用程序级别,这就是我遇到这个问题的原因。
你可以反其道而行之,使用 before_request
装饰器来默认要求登录,并使用自定义装饰器来标记 不需要 需要登录的路由,因为示例:
_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
您或许可以将其包装到它自己的派生 blueprint/Flask class 中。
编辑:基本上Best way to make Flask-Login's login_required the default