将Flask应用拆分为多个文件

时间:2016-11-20 17:08:12

标签: python flask

我在玩烧瓶。我的目录结构是这样的:

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

venv文件夹保存我的虚拟烧瓶安装。我的__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!"

但是我收到app中不存在模块main.py的错误,然后我尝试运行__init__.py。我在这做错了什么?我还应该在哪里放置run方法?

2 个答案:

答案 0 :(得分:8)

使用Flask蓝图

文件1:

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的:

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)

答案 1 :(得分:1)

我稍微修改了一下这个例子,但只是想让它尽可能简单。结构看起来像这样:

app/
  __init__.py # empty this time
  main.py
  run.py

在运行中,您启动应用程序,从main加载路由并将app.run放入__name__ =='__ main__'完成这一操作 - 因为之前的所有代码都已执行。

# in run.py
from flask import Flask
app = Flask(__name__)
from main import *


if __name__ == '__main__':
    print app.url_map
    app.run(debug=True)

在main.py中指定路线并在启动应用程序之前从中导入。

# in main.py
from run import app

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