Как разбить приложение 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