У меня возникли проблемы с пониманием того, как разбить приложение 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"
Я знаю, что в этом примере это явно не сработает, но можно ли сделать что-то подобное?
Благодарность
источник
accountList
класса в один и тот же файл?С помощью
Blueprint
вы можете добавлять свои маршруты вroutes
каталог.Состав
__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 выдаст ошибку.
источник
Еще один способ сделать это - отложенная загрузка , при которой вы явно присоединяете функции просмотра при необходимости.
источник