将Python Flask应用分割成多个文件
我无法理解如何将烧瓶应用程序拆分为多个文件。
我正在创build一个Web服务,我想将API分成不同的文件(AccountAPI.py,UploadAPI.py,…),所以我没有一个巨大的Python文件。
我已经读过,你可以用蓝图来做这件事,但我并不完全确定这条路线对我来说是正确的。
最终,我想运行一个主要的Python文件,并包含其他文件,以便在运行时,它们被认为是一个大文件。
例如,如果我有Main.py和AccountAPI.py我想能够做到这一点:
Main.py:
from flask import Flask import AccountAPI app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run()
AccountAPI.py:
@app.route("/account") def accountList(): return "list of accounts"
我知道这个例子显然是行不通的,但是可以这样做吗?
谢谢
是的,蓝图是正确的做法。 你正在做的事情可以这样实现:
Main.py
from flask import Flask from AccountAPI import account_api app = Flask(__name__) app.register_blueprint(account_api) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run()
AccountAPI.py
from flask import Blueprint account_api = Blueprint('account_api', __name__) @account_api.route("/account") def accountList(): return "list of accounts"
如果这是一个选项,你可能会考虑使用不同的API前缀/不同的API /蓝图,以清楚地分离它们。 这可以通过稍微修改上面的register_blueprint
调用来完成:
app.register_blueprint(account_api, url_prefix='/accounts')
有关进一步的文件,你也可以看看官方文件 。
使用Blueprint
您可以在routes
目录中添加routes
。
结构体
app.py routes __init__.py index.py users.py
__init__.py
from flask import Blueprint routes = Blueprint('routes', __name__) from .index import * from .users import *
index.py
from flask import render_template from . import routes @routes.route('/') def index(): return render_template('index.html')
users.py
from flask import render_template from . import routes @routes.route('/users') def users(): return render_template('users.html')
app.py
from routes import * app.register_blueprint(routes)
如果你想添加一个新的路由文件,比如说accounts.py
,你只需要在routes
目录中创build文件accounts.py
,就像index.py
和users.py
,然后将其导入到routes.__init__.py
文件
from .accounts import *
如果您正在使用蓝图,并且希望将路线/redirect到您正在使用的模板内的蓝图的url,则需要使用正确的url_for语句。
在你的情况下,如果你想打开你的蓝图的url帐户,你必须在你的模板中这样说 :
href="{{ url_for('account_api.account') }}"
而对于主应用程序 ,它将看起来像这样:
redirect(url_for('account_api.account'))
否则werkzeug库会抛出一个错误。
另一种方法是使用延迟加载 ,在这种情况下,您可以根据需要显式附加视图函数。