🏠 | 💻 IT | Flask |

Как разбить приложение Flask на части

Содержание статьи
Введение
Предпосылки
Новый файл
Регистрация нового чертежа
url_for
open_resource

Введение

Разбиение приложения на части происходит с помощью чертежей - Blueprints.

Прочитать про них подробнее можно здесь .

В этой статье - руководство к действию

Предпосылки

У вас есть основной файл __init__.py или app.py в котором вы уже создали приложение Flask

Url обслуживаются с помощью @app.route

Допустим, у вас есть группа url вида

@app.route('/first/1', methods = ['GET']) @app.route('/first/2', methods = ['GET']) @app.route('/first/3', methods = ['GET'])

и группа url вида

@app.route('/second/1', methods = ['GET']) @app.route('/second/2', methods = ['GET']) @app.route('/second/3', methods = ['GET'])

Те url, которые начинаются на second вы хотите выделить в отдельное подприложение, или просто хотите разбить главный файл на части, чтобы было проще искать нужный код.

Нужно будет сделать несколько действий, первое из которых - создание нового .py файла

Новый файл

Создайте рядом с главным файлом новый файл second.py

Импортируйте туда всё, что было нужно для работы + functools

Из flask обязательно импортируйте Blueprint это ключевой модуль для данной операции.

import functools from flask import ( Blueprint, flash, g, redirect, render_template, request, session, url_for ) from werkzeug.security import check_password_hash, generate_password_hash

После импорта добавьте строку

bp = Blueprint('api', __name__, url_prefix='/second')

url_prefix='/second' означает, что все url в этом подприложении будут начинаться с second

Добавьте ваши url, но @app. замените на @bp. и second/ писать уже не нужно

@bp.route('/1', methods = ['GET']) @bp.route('/2', methods = ['GET']) @bp.route('/3', methods = ['GET'])

Файл second.py готов

Регистрация нового чертежа

Теперь в главном файле, скорее всего он называется __init__.py удалите перемещённые url

И зарегистрируйте новое подприложение прописав его чертёж

from . import second app.register_blueprint(second.bp)

url_for

Вы, скорее всего, пользовались url_for и в оригинальном файле это выглядело примерно так:

{{ url_for('second/1') }}

То теперь нужно заменить / на .

{{ url_for('second.1') }}

Шаблоны для порядка тоже имеет смысл переложить в отдельную папку templates/

open_resource

Если раньше вы писали with app.open_resource теперь нужно писать with bp.open_resource

Например:

def load_db(): with bp.open_resource('file.json') as f: return json.load(f)

Статьи о Flask
Python
Flask
Запуск Flask на хостинге
Запуск Flask на Linux сервере
Первый проект на Flask
Шаблоны Jinja
Web Forms
Blueprint - Чертежи Flask
Flask FAQ
Ошибки

Поиск по сайту

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: