当前位置:  开发笔记 > 编程语言 > 正文

烧瓶:一次装饰每条路线?

如何解决《烧瓶:一次装饰每条路线?》经验,为你挑选了1个好方法。

我有@login_required装饰器来装饰控制器动作.但是我的应用程序非常庞大,并且在许多不同的控制器文件中有大量路由.逐个去装饰每条路线似乎容易出错(我很容易错过)并且耗费时间.

有没有办法在整个应用程序中一次装饰所有路线?

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



1> Tommi Komula..:

你可以走了相反的方式,并使用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

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

编辑:基本上最好的方法是使Flask-Login的login_required成为默认值

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有