我在玩烧瓶。我的目录结构是这样的:
|--------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__.py
和main.py
。 main.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方法?
答案 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!"