【问题标题】:In Python Flask, better way to manage decorators? [duplicate]在 Python Flask 中,管理装饰器的更好方法? [复制]
【发布时间】:2016-05-19 21:26:44
【问题描述】:

我开始在 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...gzip 响应。

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

【问题讨论】:

  • 我想这就是我想知道的。如果有更好的方法。只是想改进我的工作。 :)

标签: python flask


【解决方案1】:

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

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):
    ...

【讨论】:

    猜你喜欢
    • 2012-02-09
    • 2020-07-15
    • 1970-01-01
    • 2014-11-13
    • 2014-02-16
    • 1970-01-01
    • 2011-02-06
    • 2010-10-16
    • 1970-01-01
    相关资源
    最近更新 更多