在Python Flask中,管理装饰器的更好方法是什么?

时间:2016-02-09 18:44:18

标签: python flask

我开始在Python Flask的所有路径中弹出此问题:

@defaults.app.route('/<path:path>')
@forceUpdate
@FlaskLogin.login_required
@gzipped
def serve_page(path):
    try:
        resp = flask.send_from_directory(defaults.APP_STATIC, path)
        return resp
    except Exception:
        return flask.render_template("index.html")

有更好的方法吗?

forceUpdate装饰器根据文件系统上的标志强制重定向。

登录需要用户登录。

并且Gzip ...... gzips回应。

到目前为止,我有大约20条路线,所有这些装饰组合都变得丑陋。

1 个答案:

答案 0 :(得分:0)

您可以创建一个适用于其他人的新装饰器:

from functools import reduce

_common = (gzipped, FlaskLogin.login_required, forceUpdate)
def common_decorators(f):
    return reduce(lambda f, dec: dec(f), _common, f)

然后只使用那个装饰器:

@defaults.app.route('/<path:path>')
@common_decorators
def serve_page(path):
    ...