В этой статье вы узнаете, как использовать Flask Blueprints для организации ваших приложений Flask.

Flask — это простая и удобная в использовании микроплатформа для Python, которая может помочь вам создавать масштабируемые и безопасные веб-приложения.

Иногда вы обнаружите, что разработчики сбрасывают всю свою логику в один файл с именем app.py. Вы найдете множество руководств, которые следуют одному и тому же шаблону. Но это не очень хорошая практика для крупномасштабного приложения.

Делая это, вы явно нарушаете принцип единой ответственности, согласно которому каждая часть вашего приложения должна выполнять только одну обязанность.

Если вы работали с Django, возможно, вы обнаружили, что ваш проект разделен на разные модули. В Flask вы также можете организовать свои приложения с помощью Blueprints, встроенной концепции Flask, аналогичной модулям Python.

Как выглядит приложение Flask?

Если вы будете следовать документации Flask для создания минимального приложения, структура вашего проекта будет выглядеть примерно так:

/myapp
├── /templates
├── /static
└── app.py

Папка не выглядит такой чистой? Все, что у вас есть, это файл app.py, в котором находится вся ваша логика для приложения, папка templates для хранения файлов HTML и папка static для хранения ваших статических файлов.

Давайте посмотрим на файл app.py:

from flask import Flask
app = Flask(__name__)
# Some Models Here
# Routes related to core functionalities
# Routes related to Profile Page
# Routes related to Products Page
# Routes related to Blog Page
# Routes related to Admin Page
if __name__ == '__main__':
    app.run(debug=True)

Разве это не выглядит беспорядочно (представьте, что вы создали крупномасштабное приложение)? У вас есть все ваши модели и разные маршруты внутри одного и того же файла, разбросанного тут и там.

Как чертежи решают проблему?

Теперь на сцену выходят Flask Blueprints. Схемы помогают структурировать приложение, организуя логику в подкаталогах. Кроме того, вы можете хранить свои шаблоны и статические файлы вместе с логикой в ​​одном и том же подкаталоге.

Итак, теперь с Blueprints ваше приложение будет выглядеть так:

/blueprint-tutorial
├── /myapp_with_blueprints
│   ├── __init__.py
│   ├── /admin
│   │   ├── /templates
│   │   ├── /static
│   │   └── routes.py
│   ├── /core
│   │   ├── /templates
│   │   ├── /static
│   │   └── routes.py
│   ├── /products
│   │   ├── /templates
│   │   ├── /static
│   │   └── routes.py
│   └── /profile
|       ├── /templates
|       ├── /static
|       └── routes.py        
├── app.py
├── /static
└── /templates

Теперь вы можете видеть, что у вас есть четкое разделение задач. Логика, связанная с администратором, находится в папке admin, логика, связанная с продуктами, находится в папке products и так далее.

Кроме того, мы также разделили шаблоны и статические файлы в подкаталогах, где они необходимы, чтобы неактуальные файлы не загружались при переходе на страницу, на которой они не требуются.

Как использовать чертежи

Теперь, когда вы понимаете, какие проблемы решает Blueprints, давайте посмотрим, как мы можем использовать Blueprints в наших приложениях.

Как определить план

Давайте определим наш самый первый план функциональности администратора внутри файла admin/routes.py:

from flask import Blueprint
# Defining a blueprint
admin_bp = Blueprint(
    'admin_bp', __name__,
    template_folder='templates',
    static_folder='static'
)

Поскольку Blueprint — это встроенная концепция Flask, вы можете импортировать ее из библиотеки Flask. При создании объекта класса Blueprint первым параметром является имя, которое вы хотите дать своему Blueprint. Это имя позже будет использоваться для внутренней маршрутизации (мы увидим ниже).

Второй параметр — это имя пакета Blueprint, обычно __name__. Это поможет найти root_path для чертежа.

Третий и четвертый передаваемые параметры являются необязательными аргументами ключевого слова. Определив папку template_folder и параметры static_folder, вы указываете, что будете использовать шаблоны и статические файлы для конкретных чертежей.

Как определить маршруты с помощью чертежей

Теперь, когда вы создали схему функций, связанных с администрированием, вы можете использовать ее при создании маршрутов для администраторов.

from flask import Blueprint
# Defining a blueprint
admin_bp = Blueprint(
    'admin_bp', __name__,
    template_folder='templates',
    static_folder='static'
)
@admin_bp.route('/admin')   # Focus here
def admin_home():
    return "Hello Admin!"

В приведенном выше фрагменте сосредоточьтесь на строке, где определен маршрут. Вместо обычного @app.route('…') мы использовали @admin_bp.route('…'). Вот как вы привязываете маршрут к конкретному чертежу.

Как зарегистрировать свои чертежи

Теперь у вас есть чертеж и зарегистрированный в нем маршрут. Но будет ли ваше приложение автоматически знать об этом плане?

Итак, давайте сделаем это. В файле __init__.py мы создадим приложение Flask и зарегистрируем там наши чертежи:

from flask import Flask
app = Flask(__name__)
from .admin import routes
# Registering blueprints
app.register_blueprint(admin.admin_bp)

Чтобы зарегистрировать схему, мы используем метод register_blueprint() и передаем имя схемы. Кроме того, вы можете передать другие параметры в метод для дополнительной настройки. Одним из таких является url_prefix, который может вам понадобиться.

app.register_blueprint(admin.admin_bp, url_prefix=’/admin’)

Точно так же вы можете зарегистрировать остальные свои чертежи, если у вас их больше.

Маршрутизация шаблонов с помощью Blueprints

Без Blueprints для создания ссылок в ваших шаблонах вы бы использовали что-то похожее на следующее:

<a href="{{ url_for('admin_home') }}">My Link</a>

Но теперь, когда у вас есть чертежи, вы можете определить свои ссылки как:

<a href="{{ url_for('admin_bp.admin_home') }}">My Link</a>

admin_bp, которое мы использовали выше, — это имя, которое мы дали нашей схеме внутренней маршрутизации при создании объекта.

Чтобы напечатать имя схемы шаблона Jinja2, которому принадлежит текущая страница, вы можете использовать {{request.blueprint}}.

Примечание. Чтобы использовать ресурсы Blueprint, вы можете использовать библиотеку Flask-Assets.

Подведение итогов

Blueprint — это замечательный инструмент для организации и структурирования ваших приложений Flask.

В этой статье вы узнали, что могут предложить чертежи и как их использовать в своих приложениях Flask.

Спасибо за прочтение!

Вы можете следить за мной в Твиттере.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.