[英]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
from flask import Blueprint
routes = Blueprint('routes', __name__)
from .index import *
from .users import *
from flask import render_template
from . import routes
@routes.route('/')
def index():
return render_template('index.html')
from flask import render_template
from . import routes
@routes.route('/users')
def users():
return render_template('users.html')
from routes import *
app.register_blueprint(routes)
如果你想添加一個新的路由文件,比如accounts.py
,你只需要在routes
目錄中創建文件accounts.py
,就像index.py
和users.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.