我的烧瓶应用程序当前包含一个test.py包含多个路径和main()定义路径的文件.有没有办法我可以创建一个test2.py包含未处理的路由的文件test.py?
@app.route('/somepath')
def somehandler():
# Handler code here
Run Code Online (Sandbox Code Playgroud)
我担心有太多的路由,test.py并且想要使我能够运行python test.py,这也将获取路由,test.py就像它是同一个文件的一部分一样.为了让这个变得有效,我必须做出哪些改变test.py和/或包含test2.py?
pix*_*tik 135
您可以使用通常的Python包结构将App划分为多个模块,请参阅Flask文档.
然而,
Flask使用蓝图概念来制作应用程序组件,并在应用程序或应用程序中支持常见模式.
您可以在单独的文件中将应用程序的子组件创建为蓝图:
simple_page = Blueprint('simple_page', __name__, template_folder='templates')
@simple_page.route('/<page>')
def show(page):
# stuff
Run Code Online (Sandbox Code Playgroud)
然后在主要部分使用它:
from yourapplication.simple_page import simple_page
app = Flask(__name__)
app.register_blueprint(simple_page)
Run Code Online (Sandbox Code Playgroud)
蓝图还可以捆绑特定资源:模板或静态文件.有关所有详细信息,请参阅Flask文档.
nim*_*sam 65
您可以使用简单的技巧,即从另一个文件中的 main 导入flask app 变量,例如:
test_routes.py
from __main__ import app
@app.route('/test', methods=['GET'])
def test():
return 'it works!'
Run Code Online (Sandbox Code Playgroud)
并在您声明flask应用程序的主文件中,导入测试路由,例如:
应用程序
from flask import Flask, request, abort
app = Flask(__name__)
# import declared routes
import test_routes
Run Code Online (Sandbox Code Playgroud)
它从我这边工作。
小智 25
无需蓝图和使用集中 URL 映射的棘手导入即可完成此任务
应用程序
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)
Run Code Online (Sandbox Code Playgroud)
视图.py
from flask import render_template
def index():
return render_template('index.html')
def other():
return render_template('other.html')
Run Code Online (Sandbox Code Playgroud)
Iva*_*hin 16
如果您需要拆分蓝图来分隔文件,您可以使用代码片段:
# app.py
from blueprint_module import blueprint
app = Flask(__name__)
app.register_blueprint(blueprint)
Run Code Online (Sandbox Code Playgroud)
# blueprint_module\__init__.py
from flask import Blueprint
blueprint = Blueprint('my_blueprint', __name__)
from . import page
Run Code Online (Sandbox Code Playgroud)
# blueprint_module\page.py
from . import blueprint
@blueprint.route("/url", methods=['GET'])
def hello():
return 'hello world'
Run Code Online (Sandbox Code Playgroud)
将应用程序划分为多个蓝图是一个好主意。但是,如果这还不够,并且您想将蓝图本身分成多个py文件,则可以使用常规的Python模块导入系统,然后遍历从其他文件导入的所有路由来实现。
我使用以下代码创建了一个Gist:
https://gist.github.com/Jaza/61f879f577bc9d06029e
据我所知,这是目前划分蓝图的唯一可行方法。在Flask中创建“子蓝图”是不可能的,尽管存在很多有关此问题的讨论:
https://github.com/mitsuhiko/flask/issues/593
另外,即使有可能(并且可以使用该问题线程中的一些代码片段来实现),子蓝图对于您的用例也可能过于严格-例如,如果您不希望所有路线都在子模块具有相同的URL子前缀。