我的flask应用程序目前由一个test.py文件组成,该文件包含多条路由,并定义了main()路由。是否有某种方法可以创建一个test2.py文件,其中包含test.py中未处理的路由?
@app.route('/somepath')
def somehandler():
# Handler code here
我担心在test.py中有太多的路由,我想让它这样我可以运行python test.py,它也将在test.py中获取路由,就好像它是同一文件的一部分一样。我必须在test.py和/或test2.py中进行哪些更改才能使其工作?
你可以使用简单的技巧,即从另一个文件中导入flask app变量,如:
test_routes.py
from __main__ import app
@app.route('/test', methods=['GET'])
def test():
return 'it works!'
在你的主文件中,在你声明flask app的地方,导入test-routes,像这样:
app.py
from flask import Flask, request, abort
app = Flask(__name__)
# import declared routes
import test_routes
它在我这边起作用。
如果你需要分割蓝图来分离文件,你可以使用snippet:
# app.py
from blueprint_module import blueprint
app = Flask(__name__)
app.register_blueprint(blueprint)
# blueprint_module\__init__.py
from flask import Blueprint
blueprint = Blueprint('my_blueprint', __name__)
from . import page
# blueprint_module\page.py
from . import blueprint
@blueprint.route("/url", methods=['GET'])
def hello():
return 'hello world'
这项任务可以在没有蓝图和使用集中式URL映射的复杂导入的情况下完成
app.py
import views
from flask import Flask
app = Flask(__name__)
app.add_url_rule('/', view_func=views.index)
app.add_url_rule('/other', view_func=views.other)
if __name__ == '__main__':
app.run(debug=True, use_reloader=True)
views.py
from flask import render_template
def index():
return render_template('index.html')
def other():
return render_template('other.html')
你可以使用常用的Python包结构将你的应用程序划分为多个模块,参见Flask文档。
然而,
Flask使用蓝图的概念来制作应用程序组件,并支持应用程序内或跨应用程序的公共模式。
你可以在一个单独的文件中创建应用程序的子组件作为Blueprint:
simple_page = Blueprint('simple_page', __name__, template_folder='templates')
@simple_page.route('/<page>')
def show(page):
# stuff
然后用在主要部分:
from yourapplication.simple_page import simple_page
app = Flask(__name__)
app.register_blueprint(simple_page)
蓝图还可以捆绑特定的资源:模板或静态文件。请参考Flask文档了解所有细节。