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

use*_*547 72 python web-services file-organization flask

我无法理解如何将烧瓶应用分成多个文件.

我正在创建一个Web服务,我想将api分成不同的文件(AccountAPI.py,UploadAPI.py,...),所以我没有一个巨大的python文件.

我已经读过你可以用蓝图做到这一点,但我不完全确定路线对我来说是正确的.

最终我想运行一个Main 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()
Run Code Online (Sandbox Code Playgroud)

AccountAPI.py:

@app.route("/account")
def accountList():
    return "list of accounts"
Run Code Online (Sandbox Code Playgroud)

我知道这个例子显然不会起作用,但有可能做那样的事吗?

谢谢

cyr*_*oxx 134

是的,蓝图是正确的方法.您要做的事情可以像这样实现:

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()
Run Code Online (Sandbox Code Playgroud)

AccountAPI.py

from flask import Blueprint

account_api = Blueprint('account_api', __name__)

@account_api.route("/account")
def accountList():
    return "list of accounts"
Run Code Online (Sandbox Code Playgroud)

如果这是一个选项,您可以考虑为不同的API /蓝图使用不同的URL前缀,以便将它们干净地分开.这可以通过略微修改上述register_blueprint调用来完成:

app.register_blueprint(account_api, url_prefix='/accounts')
Run Code Online (Sandbox Code Playgroud)

有关进一步的文档,您还可以查看官方文档.

  • Main.py和AccountAPI.py可以在任一文件中有一个共享的全局变量吗? (2认同)

Sea*_*ene 31

使用Blueprint您可以在routes目录中添加路由.

结构体

app.py
routes
    __init__.py
    index.py
    users.py
Run Code Online (Sandbox Code Playgroud)

__init__.py

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

from .index import *
from .users import *
Run Code Online (Sandbox Code Playgroud)

index.py

from flask import render_template
from . import routes

@routes.route('/')
def index():
    return render_template('index.html')
Run Code Online (Sandbox Code Playgroud)

users.py

from flask import render_template
from . import routes

@routes.route('/users')
def users():
    return render_template('users.html')
Run Code Online (Sandbox Code Playgroud)

app.py

from routes import *
app.register_blueprint(routes)
Run Code Online (Sandbox Code Playgroud)

如果你想添加一个新的路由文件,比如说accounts.py,你只需要accounts.pyroutes目录中创建文件,就像index.pyusers.py,然后在routes.__init__.py文件中导入它

from .accounts import *
Run Code Online (Sandbox Code Playgroud)

  • 它抛出导入错误 (2认同)