【问题标题】:import decorated and wrapped function to blueprints in flask将装饰和包装的功能导入烧瓶中的蓝图
【发布时间】:2020-09-06 05:31:14
【问题描述】:

我有一个 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

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

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

【问题讨论】:

  • 您可以在文件中创建一个新函数并使用应用程序对其进行初始化
  • 你能解释一下吗?

标签: python flask decorator python-decorators


【解决方案1】:

你在 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

【讨论】:

    猜你喜欢
    • 2016-09-16
    • 2012-07-14
    • 2015-06-09
    • 2021-04-06
    • 2020-09-20
    • 1970-01-01
    • 2021-01-17
    • 2014-08-25
    相关资源
    最近更新 更多