我的烧瓶应用程序当前包含一个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
中包含哪些更改才能使其生效?
答案 0 :(得分:122)
您可以使用通常的Python包结构将您的App划分为多个模块see the Flask docs.
然而,
Flask使用蓝图概念来制作应用程序组件,并在应用程序或应用程序中支持常见模式。
您可以在单独的文件中将应用的子组件创建为蓝图:
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 docs。
答案 1 :(得分:15)
我想在GitHub上推荐flask-empty。
它提供了一种简便的方式来理解Blueprints,多个视图和extensions。
答案 2 :(得分:13)
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')
答案 3 :(得分:4)
将应用划分为蓝图是一个好主意。但是,如果这还不够,如果你想将蓝图本身划分为多个py文件,那么使用常规的Python模块导入系统,然后循环遍历从中导入的所有路由也是可能的。其他文件。
我用这个代码创建了一个Gist:
https://gist.github.com/Jaza/61f879f577bc9d06029e
据我所知,这是目前划分蓝图的唯一可行方法。它不可能创建&#34;子蓝图&#34;在Flask中,虽然有一个问题,但有很多关于此问题的讨论:
https://github.com/mitsuhiko/flask/issues/593
此外,即使有可能(并且它可能可以使用该问题线程中的某些片段),但子蓝图可能对您的用例过于严格 - 例如如果您不希望子模块中的所有路由都具有相同的URL子前缀。
答案 4 :(得分:1)
如果您需要拆分蓝图以分隔文件,您可以使用代码段:
app.py
from blueprint_module import blueprint
app = Flask(__name__)
app.register_blueprint(bluepirnt)
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'
答案 5 :(得分:0)
您可以像django一样分割。参见下面的骨架
答案 6 :(得分:0)
您可以使用简单的技巧,即从另一个文件内部的main导入flask应用程序变量,例如:
test-routes.py
from __main__ import app
@app.route('/test', methods=['GET'])
def test():
return 'it works!'
在声明烧瓶应用程序的主文件中,导入测试路由,例如:
app.py
from flask import Flask, request, abort
app = Flask(__name__)
# import declared routes
import test-routes
它在我这边起作用。