gpt4 book ai didi

python - 将 Flask 应用拆分为多个文件

转载 作者:行者123 更新时间:2023-11-28 19:47:41 25 4
gpt4 key购买 nike

我正在玩 flask 。我的目录结构是这样的:

|--------flask-test
|----------------app
|-----------------------static
|-----------------------templates
|-----------------------venv
|-----------------------__init__.py

venv 文件夹包含我的虚拟 flask 安装。我的 __init__.py 是这样的:

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()

这没有问题但是现在我想把它分成两个文件 __init__.pymain.pymain.py 将与 __init__.py 位于同一目录中。到目前为止我已经尝试过:

__init__.py:

from flask import Flask

app = Flask(__name__)
import main

main.py:

from app import app
@app.route("/")
def hello():
return "Hello World!"

然而,我收到一个错误,指出模块 appmain.py 中不存在,然后我尝试运行 __init__.py。我在这里做错了什么?还有我应该把 run 方法放在哪里?

最佳答案

使用 Flask 蓝图,您可以将应用程序分解为多个文件,这些文件可以重新组合成一个更大的应用程序。

下面是一个分为 3 个文件的示例应用程序,它演示了这一点:

  • file1 : 定义一个/hello 路由
  • file2 : 定义一个/world 路由
  • file3 : 主应用,作为胶水,使用register_blueprint函数整合file1和file2中的应用

file1: 用路由/hello 定义 app_file1

from flask import Blueprint, render_template, session,abort

app_file1 = Blueprint('app_file1',__name__)
@app_file1.route("/hello")
def hello():
return "Hello World from app 1!"

file2: 定义 app_file2 路由/world

from flask import Blueprint, render_template, session,abort

app_file2 = Blueprint('app_file2',__name__)
@app_file2.route("/world")
def world():
return "Hello World from app 2!"

file3:主应用

from flask import Flask
from file1 import app_file1
from file2 import app_file2
main_app = Flask(__name__)
main_app.register_blueprint(app_file1)
main_app.register_blueprint(app_file2)

注意:为了简化事情,这个例子被保存在一个目录中。在更大的应用程序中,您可能希望进一步将内容分解为目录/模块。使用模块是额外的步骤,允许仅公开您想要公开的功能,进行额外的初始化并避免循环依赖。

为诸如 sqlalchemy 模型之类的数据访问之类的东西提供额外的文件夹也是一种很好的做法。将具有常见功能(如支付处理)的文件封装到一个模块中以实现潜在重用、代码清晰和维护总是好的

如果您的应用程序有大量 View ,您可能还需要额外的子文件夹

关于python - 将 Flask 应用拆分为多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40706854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com