Web Services 将Python Flask应用程序拆分为多个文件

u3r8eeie  于 2022-11-15  发布在  Python
关注(0)|答案(4)|浏览(158)

我很难理解如何将一个 flask 应用程序拆分为多个文件。
我正在创建一个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"

我知道这个例子显然行不通,但有可能做到这一点吗?
谢谢

8e2ybdfx

8e2ybdfx1#

是的,蓝图是正确的方法。你要做的事情可以这样实现:
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/蓝图使用不同的URL前缀,以便将它们清楚地分开。

app.register_blueprint(account_api, url_prefix='/accounts')

有关更多文档,您还可以查看the official docs

xiozqbni

xiozqbni2#

使用Blueprint,您可以在routes目录中添加路由。
结构

app.py
routes
    __init__.py
    index.py
    users.py

初始化_.py

from flask import Blueprint
routes = Blueprint('routes', __name__)

from .index import *
from .users import *

第1001章:我的index.py

from flask import render_template
from . import routes

@routes.route('/')
def index():
    return render_template('index.html')

第1001章:我的users.py

from flask import render_template
from . import routes

@routes.route('/users')
def users():
    return render_template('users.html')

第1001章:我的app.py

from routes import *
app.register_blueprint(routes)

如果要添加新的路由文件,例如accounts.py,只需在routes目录中创建文件accounts.py,就像index.pyusers.py一样,然后将其导入到routes.__init__.py文件中

from .accounts import *
carvr3hs

carvr3hs3#

如果您正在使用蓝图,并希望路由/重定向到您正在使用的模板中蓝图的url,则需要使用正确的url_for语句。
在您的情况下,如果您想打开蓝图的url帐户,您必须在您的模板中这样声明:

href="{{ url_for('account_api.account') }}"

而对于主应用程序,它将如下所示:

redirect(url_for('account_api.account'))

否则werkzeug库将抛出错误。

pbgvytdp

pbgvytdp4#

另一种实现方法是使用lazy loading,其中您可以根据需要显式地附加视图函数。

相关问题