Приложение Split 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"
Я знаю, что в этом примере это явно не сработает, но возможно ли что-то подобное?
Спасибо
Ответы
Ответ 1
Да, чертежи - правильный способ сделать это. То, что вы пытаетесь сделать, может быть достигнуто следующим образом:
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/чертежей, чтобы их чистое разделение. Это можно сделать с небольшой модификацией вышеупомянутого вызова register_blueprint
:
app.register_blueprint(account_api, url_prefix='/accounts')
Для дополнительной документации вы также можете просмотреть официальные документы.
Ответ 2
Используя Blueprint
, вы можете добавить свои маршруты в каталог routes
.
Структура
app.py
routes
__init__.py
index.py
users.py
__ __ INIT. Ру
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 *
Ответ 3
Если вы используете чертежи и хотите перенаправить/перенаправить URL-адрес вашего чертежа внутри шаблона, который вы используете, вам нужно использовать правильный оператор url_for.
В вашем случае, если вы хотите открыть учетную запись url вашего проекта, вам необходимо указать его в шаблоне:
href="{{ url_for('account_api.account') }}"
и для основного приложения он будет выглядеть так:
redirect(url_for('account_api.account'))
В противном случае библиотека werkzeug выведет ошибку.
Ответ 4
Другим способом сделать это может быть ленивая загрузка, где вы явно добавляете функции просмотра по необходимости.