簡體   English   中英

將 Python Flask 應用程序拆分為多個文件

[英]Split Python Flask app into multiple files

我無法理解如何將燒瓶應用程序拆分為多個文件。

我正在創建一個 Web 服務,我想將 api 拆分為不同的文件(AccountAPI.py、UploadAPI.py、...),這樣我就沒有一個巨大的 python 文件。

我讀過您可以使用藍圖來做到這一點,但我不完全確定這條路線是否適合我。

最終,我想運行一個 Main python 文件並包含其他文件,以便在運行時將它們視為一個大文件。

例如,如果我有 Main.py 和 AccountAPI.py 我希望能夠做到這一點:

主要.py:

from flask import Flask
import AccountAPI

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

帳戶API.py:

@app.route("/account")
def accountList():
    return "list of accounts"

我知道這個例子顯然行不通,但是有可能做這樣的事情嗎?

謝謝

是的,藍圖是正確的方法。 您正在嘗試做的事情可以這樣實現:

主文件

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 前綴,以便清楚地分開它們。 這可以通過對上述register_blueprint調用稍作修改來完成:

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

如需更多文檔,您還可以查看官方文檔

使用Blueprint ,您可以在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 *

索引.py

from flask import render_template
from . import routes

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

用戶.py

from flask import render_template
from . import routes

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

應用程序.py

from routes import *
app.register_blueprint(routes)

如果你想添加一個新的路由文件,比如accounts.py ,你只需要在routes目錄中創建文件accounts.py ,就像index.pyusers.py ,然后在routes.__init__.py中導入它文件

from .accounts import *

如果您正在使用藍圖並希望在您使用的模板內路由/重定向到藍圖的 url,則需要使用正確的 url_for 語句。

在您的情況下,如果您想打開藍圖的 url 帳戶,您必須在模板中這樣聲明:

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

對於主應用程序,它看起來像這樣:

redirect(url_for('account_api.account'))

否則 werkzeug 庫會拋出錯誤。

另一種方法是延遲加載,您可以根據需要顯式附加視圖功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM