Разделить приложение Python Flask на несколько файлов
У меня проблемы с пониманием, как разделить приложение фляги на несколько файлов.
Я создаю веб-сервис и хочу разделить API-интерфейсы на разные файлы (AccountAPI.py, UploadAPI.py, ...), чтобы у меня не было одного огромного файла Python.
Я читал, что вы можете сделать это с Blueprints, но я не совсем уверен, что маршрут мне подходит.
В конечном итоге я хочу запустить один основной файл 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"
Я знаю, что с этим примером это явно не сработает, но возможно ли сделать что-то подобное?
Спасибо
4 ответа
Да, Blueprints - верный способ сделать это. То, что вы пытаетесь сделать, может быть достигнуто следующим образом:
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"
Если это вариант, вы можете рассмотреть возможность использования разных префиксов URL для разных API /Blueprints для их четкого разделения. Это может быть сделано с небольшой модификацией выше 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 *
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
, вам просто нужно создать файл accounts.py
в routes
каталог, так же, как 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 выдаст ошибку.
Еще один способ сделать это может быть с ленивой загрузкой, где вы бы явно присоединяли функции представления по мере необходимости.