我正在使用烧瓶并尝试以下方法.
我已经定义了一个main.py文件,通过它我想运行我的应用程序,即python main.py -
from flask import Flask
from view import tags
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
Run Code Online (Sandbox Code Playgroud)
我已经定义了一个名为view的包,我将在其中声明我的不同视图模块,每个模块都有自己的路由.view.tags.py -
from flask import Flask
app = Flask(__name__)
@app.route('/e')
def hello_world2():
return 'Hello World!'
Run Code Online (Sandbox Code Playgroud)
所以我需要在main.py中使用全局app对象来运行服务器,以及在我的包的视图类中注册路由.那么如何创建全局app对象并在所有类之间共享呢?
谢谢,穆尔塔扎
小智 49
您可以从flask导入current_app.它存储对全局应用程序对象的引用.
from flask import current_app as app
def home():
return render_template('base.html', name=app.name)
Run Code Online (Sandbox Code Playgroud)
Ign*_*nas 22
首先,我建议您查看蓝图http://flask.pocoo.org/docs/blueprints/这将有助于轻松组织应用程序.
另请参阅http://flask.pocoo.org/docs/api/#flask.current_app flask.current_app,了解如何在其他模块中获取应用实例的方法.
这个链接也可能有助于如何组织和构建烧瓶应用程序(这不是理想的,但可以给你一些想法)https://github.com/mitsuhiko/flask/wiki/Large-app-how-to
玩得开心 :)
Jef*_*ner 11
只需从其他文件中导入它.也许最好的方法是将您的应用程序对象放在一个文件中,并从中导入其他所有内容.
例如,您的main.py可能仍然具有:
from flask import Flask
from view import tags
app = Flask(__name__)
Run Code Online (Sandbox Code Playgroud)
然后在其他文件中,你可以这样做:
from .main import app
Run Code Online (Sandbox Code Playgroud)
或者,如果在您的包裹之外,只需使用完整的字符串
from mypackagename.main import app
Run Code Online (Sandbox Code Playgroud)
需要注意的一件事是循环进口.处理此问题的最简单方法是首先创建应用程序,然后在创建后从基本文件中导入所需的任何其他内容.
例如:
from flask import Flask
app = Flask(__name__)
# do some stuff with app
from .views import view1, view2
from .server import run
Run Code Online (Sandbox Code Playgroud)
只要你在创建应用程序之后放入导入,就像上面那样,你就不应该有循环导入的问题了.
cod*_*eek 11
一种方法是创建一个整体包并__init__.py在声明所有全局变量的文件下添加一个文件.例如,在您的情况下,您可以创建以下内容:
myapplication/
* __init__.py
* myviews/
* __init__.py
* view.py
* tags.py
Run Code Online (Sandbox Code Playgroud)
等等
现在,您在__init__.py文件中添加以下代码:
app = Flask(__name__)
Run Code Online (Sandbox Code Playgroud)
只要导入包myapplication,您现在可以在任何地方使用此app变量.
import myapplication.myviews.view
Run Code Online (Sandbox Code Playgroud)