Flask Python — микрофреймворк (минималистичный веб-фреймворк) для создания веб-приложений на Python. Создан в 2010 году немецким разработчиком Армином Ронахером, распространяется под открытой лицензией BSD и устанавливается одной командой: pip install flask.
В отличие от полноценных фреймворков, Flask не навязывает структуру и не включает ORM (объектно-реляционный маппер, Object-Relational Mapping) или систему авторизации «из коробки». Зато даёт три вещи: маршрутизацию через декоратор @app.route, встроенный шаблонизатор Jinja2 и архитектуру WSGI (Web Server Gateway Interface — стандарт интерфейса между веб-сервером и Python-приложением). Остальное разработчик подключает сам через расширения.
Не знаете, с чего ребёнку начать в IT?
Дайте попробовать разные направления: Python, веб-разработку и робототехнику
Реальные компании давно сделали выбор в пользу Flask: Pinterest, Netflix, Uber, Reddit, Twilio используют его для API и микросервисов.
В статье — всё для старта с нуля: установка на Linux, macOS и Windows, первое Hello World за 10 строк, маршруты, шаблоны Jinja2, работа с базой данных SQLite и PostgreSQL, запуск через Gunicorn в production.
Хотите освоить веб-разработку на Python с нуля? На курсе «Программирование: Уверенный старт» третий модуль целиком посвящён Flask: клиент-серверная архитектура, шаблоны Jinja2, работа с базой данных SQLite и реальный веб-проект в портфолио. Обучение онлайн, из любой точки России, бесплатно (0 ₽ вместо 50 000 ₽). Узнайте подробнее на странице курса.
Flask — микрофреймворк для веб-разработки на Python. Слово «микро» не означает ограниченность — это философия: минимальный набор инструментов и максимум свободы для разработчика.
Основные факты: год создания — 2010; автор — Армин Ронахер; лицензия — BSD (открытый код, коммерческое применение разрешено); минимальная версия Python — 3.5, рекомендуется 3.10+.
Чем Flask отличается от обычной библиотеки? Библиотеку разработчик вызывает сам, когда нужно. Фреймворк управляет структурой приложения: задаёт, где лежат папки /templates и /static, как строится система маршрутов, как обрабатываются входящие запросы. Flask — именно фреймворк. В разговорной речи его часто называют «библиотекой» — это не критичная ошибка, но технически точнее «микрофреймворк».
Сценарии применения:
Расширяемость — главная сила Flask. Базовый пакет компактен, но экосистема богатая: Flask-SQLAlchemy (работа с базами данных), Flask-Login (авторизация пользователей), Flask-WTF (веб-формы с CSRF-защитой — защитой от межсайтовых запросов), Flask-Migrate (версионирование схемы базы данных), Flask-Bcrypt (хеширование паролей).
Оба фреймворка написаны на Python, оба поддерживают стандарт WSGI. Разница — в объёме встроенных инструментов и свободе архитектурных решений.
| Параметр |
Flask |
Django |
FastAPI |
|---|---|---|---|
| Тип | Микрофреймворк | Full-stack фреймворк | Асинхронный микрофреймворк |
| Встроенная ORM | Нет (через Flask-SQLAlchemy) | Да | Нет |
| Шаблонизатор | Jinja2 | Django Templates | Нет (через Jinja2) |
| Порог входа | Низкий | Средний | Средний |
| Гибкость | Высокая | Ограниченная | Высокая |
| Production-сервер | Gunicorn, uWSGI | Gunicorn, uWSGI | Uvicorn, Hypercorn |
| Лучший сценарий | API, микросервисы | Монолиты, CMS | Высоконагруженные API |
Flask легче Django: меньше встроенных компонентов, больше контроля над каждым решением. Django включает ORM, административную панель, систему авторизации и многое другое прямо «из коробки» — это ускоряет старт, но уменьшает гибкость архитектуры.
Когда выбирать Flask: REST API, микросервисы, нестандартная архитектура, прототипирование.
Когда выбирать Django: крупные монолиты, проекты с административной панелью, когда нужно быстро стартовать без ручного подбора каждого компонента.
Начинающему разработчику Flask проще для понимания: вы видите каждый слой системы явно, ничего не скрыто «под капотом» фреймворка.

Процесс установки состоит из четырёх шагов: установить Python → создать виртуальное окружение (venv, от virtual environment) → установить Flask через менеджер пакетов pip → запустить приложение. Для работы нужен Python версии 3.5 и выше, рекомендуется 3.10+. Скачать интерпретатор можно с официального сайта python.org, Flask доступен через репозиторий PyPI.

Откройте терминал и проверьте версию Python:
python3 —version
Создайте папку проекта и виртуальное окружение:
mkdir my_flask_app && cd my_flask_app
python3 -m venv .venv
source .venv/bin/activate
Теперь установите Flask:
pip install flask
Проверьте результат:
python -m flask —version
Создайте файл app.py с минимальным кодом (разберём его в следующем разделе) и запустите:
python app.py
Приложение откроется по адресу localhost:5000 в браузере. Чтобы выйти из виртуального окружения, введите deactivate.

На Windows установка требует нескольких дополнительных шагов по сравнению с Linux.
Шаг 1. Скачайте Python с python.org. При установке обязательно поставьте галочку «Add Python to PATH» — без этого Python не будет распознан в командной строке.
Шаг 2. Откройте PowerShell (Win + X → Windows PowerShell) и создайте папку проекта:
mkdir my_flask_app
cd my_flask_app
Шаг 3. Создайте виртуальное окружение и активируйте его:
python -m venv .venv
.venv\Scripts\activate
После активации в строке ввода появится префикс (.venv) — это означает, что все пакеты теперь устанавливаются в изолированную среду проекта, а не глобально в систему.
Шаг 4. Установите Flask и проверьте версию:
pip install flask
python -m flask —version
Если Python или pip не распознаются — откройте: Панель управления → Система → Дополнительные параметры системы → Переменные среды. Python должен быть прописан в переменной PATH. Именно здесь чаще всего спотыкаются новички, а большинство русскоязычных туториалов эту особенность Windows не объясняют.
Виртуальное окружение — инструмент изоляции зависимостей отдельного проекта от остальной системы.
Без него все пакеты устанавливаются глобально. Проблема возникает, когда два проекта требуют разные версии одного пакета: проект А работает на Flask 2.3, проект Б — на Flask 3.1. Глобальная установка не хранит обе версии одновременно: появляются конфликты между библиотеками и несовместимость зависимостей. Виртуальное окружение решает это полностью — у каждого проекта свой изолированный набор пакетов.
Команды для создания и управления venv:
# Создать
python3 -m venv .venv
# Активировать (Linux/macOS)
source .venv/bin/activate
# Активировать (Windows)
.venv\Scripts\activate
# Деактивировать (любая платформа)
deactivate
Договорённость в сообществе: называть папку .venv или env. Добавьте .venv в файл .gitignore — тысячи служебных файлов окружения не должны попадать в репозиторий. Создавайте отдельное виртуальное окружение для каждого проекта.

Минимальное Flask-приложение — 10 строк кода. Создайте файл app.py:
from flask import Flask # импорт класса Flask из пакета
app = Flask(__name__) # __name__ помогает Flask найти /templates и /static
@app.route(‘/’) # декоратор связывает URL ‘/’ с функцией
def index():
return ‘Привет, мир!’ # Flask вернёт эту строку в браузер
if __name__ == ‘__main__’:
app.run(debug=True) # запуск; debug=True — автоперезагрузка при изменениях
Запустите: python app.py. Откройте браузер: localhost:5000.

Что происходит внутри:
⚠️ debug=True — только для разработки. В production это значение должно быть False.
По мере роста проекта структура папок выглядит так:
my_flask_app/
├── app.py # главный файл приложения
├── /templates # HTML-шаблоны Jinja2
├── /static # CSS, JavaScript, изображения
├── config.py # настройки приложения
└── models.py # модели данных
Три концепции лежат в основе любого Flask-приложения: маршрутизация, шаблоны и обработка HTTP-запросов. Без них нельзя построить даже простой сайт. Каждую разберём отдельно — с примером кода, от простого к сложному.
Маршрутизация связывает URL-адрес с Python-функцией. В Flask за это отвечает декоратор @app.route. Декоратор — конструкция Python, которая изменяет поведение функции без изменения её кода.
@app.route(‘/’)
def index():
return ‘Главная страница’
@app.route(‘/about’)
def about():
return ‘О нас’
@app.route(‘/user/<username>’) # <username> — динамический параметр из URL
def profile(username):
return f’Профиль: {username}’
HTTP-методы указываются явно в параметре methods:
@app.route(‘/login’, methods=[‘GET’, ‘POST’])
def login():
if request.method == ‘POST’:
pass # обработка отправленной формы
return render_template(‘login.html’)
GET используется для получения страниц и данных; POST — для отправки форм на сервер.
Функция url_for(‘index’) генерирует URL по имени Python-функции — это обратная маршрутизация. Если URL-структура изменится, не придётся переписывать все ссылки вручную: достаточно обновить один маршрут.
Jinja2 — шаблонизатор (инструмент для вставки данных Python в HTML-файлы), встроенный во Flask. Flask ищет шаблоны автоматически в папке /templates.
Базовый синтаксис Jinja2:
Ребенок хочет изучать программирование? Пусть начнёт с реальных проектов
На курсе школьники создают Telegram-бота, сайт и веб-приложение
Функция render_template() передаёт данные из Python в HTML и обеспечивает рендеринг шаблона:
@app.route(‘/users’)
def users():
users_list = [‘Алексей’, ‘Мария’, ‘Иван’]
return render_template(‘users.html’, users=users_list)
В файле templates/users.html:
{% for user in users %}
<p>{{ user }}</p>
{% endfor %}
Наследование шаблонов позволяет создать единый макет base.html с общей шапкой и подвалом, а в дочерних шаблонах переопределять только нужный блок — динамическое содержимое:
{% extends «base.html» %}
{% block content %}
<h1>Список пользователей</h1>
{% endblock %}
Шапка и подвал прописываются один раз. Копировать на каждую страницу их не нужно.
Объект request содержит данные входящего HTTP-запроса. Импортируется из пакета Flask:
from flask import Flask, request, jsonify
@app.route(‘/search’)
def search():
query = request.args.get(‘q’, ») # GET-параметр из URL: /search?q=flask
return f’Поиск: {query}’
@app.route(‘/submit’, methods=[‘POST’])
def submit():
name = request.form[‘name’] # поле формы из POST-запроса
return f’Получено: {name}’
Функция jsonify() возвращает ответ в формате JSON (JavaScript Object Notation — текстовый формат обмена данными) — основной инструмент при построении REST API:
@app.route(‘/api/status’)
def api_status():
return jsonify({‘status’: ‘ok’, ‘version’: ‘1.0’})
Для кастомных страниц ошибок используйте декоратор @app.errorhandler:
@app.errorhandler(404)
def not_found(e):
return render_template(‘404.html’), 404
Страница 404 создаётся как обычный Jinja2-шаблон — никаких специальных настроек не нужно.
Flask не включает встроенную СУБД (систему управления базами данных) — это осознанное решение. Разработчик подключает нужную базу через расширение.
ORM (объектно-реляционный маппер, Object-Relational Mapping) — прослойка между Python-кодом и SQL: вместо написания запросов вручную вы работаете с классами и объектами Python. Основное расширение для подключения базы данных — Flask-SQLAlchemy.
Для разработки обычно используют SQLite — она встроена в Python и не требует установки отдельного сервера. Для production — PostgreSQL.
SQLite встроена в Python: устанавливать сторонние сервисы не нужно, вся база хранится в одном файле.
pip install flask-sqlalchemy
Настройка подключения и создание модели данных:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config[‘SQLALCHEMY_DATABASE_URI’] = ‘sqlite:///database.db’
db = SQLAlchemy(app)
class User(db.Model): # модель = таблица в базе данных
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
CRUD-операции (Create, Read, Update, Delete — создание, чтение, обновление, удаление) через SQLAlchemy:
# Создать
new_user = User(username=’alex’, email=’alex@mail.ru’)
db.session.add(new_user)
db.session.commit()
# Прочитать
user = User.query.filter_by(username=’alex’).first()
# Удалить
db.session.delete(user)
db.session.commit()
Инициализация базы данных через Flask shell:
flask shell
>>> db.create_all()
PostgreSQL — production-grade СУБД с поддержкой сложных запросов, транзакций и высокой нагрузки. Для подключения нужен драйвер:
pip install psycopg2-binary
URI подключения в конфигурации:
app.config[‘SQLALCHEMY_DATABASE_URI’] = ‘postgresql://user:password@localhost/dbname’
Flask-Migrate решает задачу, которую разработчики часто недооценивают. При изменении схемы таблицы — добавлении колонки, переименовании поля — команда db.create_all() не трогает существующие таблицы. Без миграций базы данных придётся удалять и пересоздавать их вручную: в production это равнозначно потере данных. Flask-Migrate предотвращает это, версионируя схему через отдельные скрипты:
pip install flask-migrate
flask db init # создаёт папку migrations (один раз)
flask db migrate -m «добавлена колонка email» # создаёт скрипт изменений
flask db upgrade # применяет изменения к базе данных
Откатить миграцию: flask db downgrade.

Встроенный сервер разработки Flask — однопоточный. Он обрабатывает запросы по одному, нестабилен под нагрузкой и сам предупреждает при каждом запуске: «Do not use it in a production deployment» (не использовать для production-развёртывания).
Для production нужен WSGI-сервер. WSGI (Web Server Gateway Interface) — стандарт интерфейса между веб-сервером и Python-приложением; Flask изначально построен по этому стандарту, поэтому совместим с любым WSGI-совместимым сервером.
Gunicorn (Green Unicorn) — наиболее распространённый выбор для Flask:
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 app:app
Параметры запуска:
Перед запуском через Gunicorn убедитесь, что debug=False. Схема работы: браузер отправляет запрос → Gunicorn принимает и распределяет между воркерами → Flask обрабатывает логику → ответ возвращается через Gunicorn обратно в браузер. База данных подключается на уровне Flask-приложения отдельно.

Официальная документация — flask.palletsprojects.com. Написана на английском, структурирована по разделам: Quick Start, Patterns, Deployment. Для русскоязычных материалов — Хабр: там большая коллекция туториалов и переводов по Flask.
Онлайн-среды без установки. Попробовать Flask без Python на локальном компьютере можно через PythonAnywhere или Replit: оба сервиса запускают Python прямо в браузере — без pip, venv и настройки окружения. Удобно для первого знакомства с возможностями фреймворка. Для полноценной разработки нужна локальная среда.
Роадмап (roadmap — карта обучения) Flask для начинающих:
Курс «Программирование: Уверенный старт» охватывает именно этот путь в третьем модуле: веб-приложения с Flask, шаблоны Jinja2 и база данных SQLite. Формат — онлайн, из любой точки России, бесплатно (0 ₽ вместо 50 000 ₽). Записи занятий доступны в личном кабинете в любое время. Подробнее — на странице курса.
Flask технически является микрофреймворком: он управляет структурой приложения и потоком запросов, а не просто предоставляет набор функций. Библиотеку разработчик вызывает сам; фреймворк задаёт, как организован проект: папки /templates и /static, система маршрутов через @app.route. В разговорной речи Flask называют «библиотекой» — это не критичная ошибка, но технически точнее именно «микрофреймворк».
Да. PythonAnywhere и Replit позволяют запустить Flask прямо в браузере — без Python, venv и pip на локальной машине. Достаточно зарегистрироваться, создать Python-файл и написать from flask import Flask. Удобно для первого знакомства с возможностями фреймворка. Для полноценной разработки рекомендуется локальная среда с виртуальным окружением.
Flask — микрофреймворк: минимальный набор инструментов и максимальная свобода архитектуры. Django — full-stack (полный стек): встроенные ORM, административная панель, авторизация. Выбирайте Flask для REST API, микросервисов и нестандартной архитектуры. Django — для крупных монолитов, когда важна скорость старта без ручного подбора каждого компонента.
Без venv все пакеты устанавливаются глобально. Если два проекта используют разные версии Flask или SQLAlchemy — возникнут конфликты зависимостей. Виртуальное окружение изолирует зависимости каждого проекта. Создаётся командой python3 -m venv .venv, активируется одной командой, деактивируется через deactivate. Рекомендуется создавать отдельный venv для каждого проекта.
Базовые знания HTML необходимы: Flask через Jinja2 генерирует HTML-страницы. Понимание тегов, форм и структуры документа поможет работать с шаблонами. Для стилизации достаточно подключить Bootstrap (готовая библиотека CSS-компонентов) через CDN (Content Delivery Network — сеть серверов для быстрой доставки файлов) — одна строка в <head> шаблона даёт доступ к кнопкам, формам и адаптивной сетке.
Встроенный Flask dev-сервер однопоточный и нестабилен под нагрузкой — Flask сам предупреждает в консоли: «Do not use it in a production deployment». Gunicorn — WSGI-сервер, который обрабатывает несколько запросов параллельно. Запуск: gunicorn -w 4 -b 0.0.0.0:5000 app:app, где -w 4 означает четыре параллельных воркера.
Jinja2 — шаблонизатор, встроенный во Flask. Он вставляет данные Python в HTML: {{ переменная }} заменяется реальным значением при рендеринге страницы. Наследование шаблонов через {% extends «base.html» %} позволяет создать единый макет и не дублировать шапку и подвал на каждой странице сайта.
Оптимальный путь: освойте Python (переменные, функции, классы) → установите Flask в виртуальное окружение → напишите Hello World → изучите маршрутизацию и Jinja2 → подключите SQLite через Flask-SQLAlchemy → реализуйте авторизацию → разверните через Gunicorn. Курс «Программирование: Уверенный старт» проходит этот путь в Модуле 3 (Flask, Jinja2, SQLite) — бесплатно, с реальными проектами в портфолио. Подробнее на странице курса.
Пусть ребёнок сделает первый IT-проект уже в этом месяце
Бесплатный онлайн-курс с понятной программой, поддержкой и проектами для портфолио