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

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

Введение

Разбиение приложения на части происходит с помощью чертежей - 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 на Linux сервере
Flask в Docker
Первый проект на Flask
Шаблоны Jinja
Web Forms
Blueprint - Чертежи Flask
Как разбить приложение Flask на части
Flask FAQ
Ошибки
Декораторы в Python
HTML
CSS
Изображение баннера

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

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

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