将装饰和包装函数导入烧瓶中的蓝图

import decorated and wrapped function to blueprints in flask

我有一个 login_required 装饰功能,用于管理页面访问。

我的整个 Flask 项目都是蓝图结构的。 app.py 中只有主要内容。所以我已经将 loqin_requiered 函数设置为 app.py 并且现在想在我的蓝图文件中使用它。

app.py

from blueprint1 import blueprint_function1
app.register_blueprint(blueprint_function1)
def login_required(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if "logged_in" in session:
            return f(*args, **kwargs)
        else:
            flash("Bu Sayfayi görüntülemek icin lütfen giris yapin", category="danger")
            return redirect(url_for("login"))
    return decorated_function

在我的 blueprint1.py 中,我执行以下操作:

from app import loqin_required

然后我得到以下错误: 导入错误:无法导入名称 'blueprint_function1'

如何在其他文件中使用这个装饰器?

您在 blueprint1.py 中导入 login_required:

from app import login_required

现在您还可以在 app.py 中导入 blueprint1:

from blueprint1 import blueprint_function1

这两个模块相互导入,会造成Python Circular Dependency.

要解决此问题,您只需创建一个新模块来存储您的装饰器。例如,在 app.py 之外创建一个 decorators.py 模块。然后把blueprint1.py中的import语句改成:

from decorators import login_required