22

我正在尝试使用 Flask 创建一个简单但并非微不足道的应用程序,但我一直遇到文档中没有很好解释的情况。

我希望我的应用程序在不同的模块之间拆分,但看起来很难从主模块以外的任何其他地方访问主app对象(或dbfrom )。flask-sqlalchemy看起来您必须真正编写自己的方式,将其视为一切都可以访问的全局,这需要一些有问题的代码和一些时间。

两者appdb都是在主应用程序实例化的级别创建的,每个示例都假定它们在顶层可用。但是如果我将不同的 url 处理程序拆分为不同的模块,我将失去使用@app.route装饰器的能力。我可以用 解决这个问题app.add_url_rule('/...', some.module...),但话又说回来,app 没有传递给那个函数。

同样的事情发生在db- 我不知道我是否应该将它粘贴到,或者通过某种方式g使其可以访问。app这样做并不能帮助我将模型移动到一个单独的模块中——导入它们时我应该如何访问db它们?所有示例再次假设它仅可用作局部变量。

我是否遗漏了一些明显的东西,或者我是否试图在这里使用烧瓶来完成错误的任务?

4

2 回答 2

21

你的问题的答案是蓝图。实际上,如果您查看文档,就会提到蓝图可以将应用程序划分为模块。

示例代码:

    from flask import Blueprint

    mod = Blueprint(blueprint_name, __name__, template_folder="folder_name"
                    static_folder="folder_name")

    @mod.route('/mymodule')
    def view():
         # your code

在 app.py 中

    from yourmodule import mod 

    app.register_blueprint(mod)

这是将应用程序划分为模块的正确方法。查看蓝图文档了解更多详细信息。

此外,如果您需要在任何其他模块中访问应用程序,您应该使用current_app应用程序的代理。

    from flask import current_app

查看此文档,该文档指导了烧瓶的创建者如何将烧瓶应用程序划分为大型项目的模块。

于 2012-07-13T18:53:26.850 回答
2

您是否看过新blueprints 功能(我还没有使用它,但听起来这可能对您的情况有所帮助)。

于 2012-07-13T16:27:20.307 回答