К содержанию

Wiki · Технологии разработки

Flask

Содержание 5 разделов

    Flask – это микрофреймворк на Python для веб-приложений и API. В ядре у него маршруты, обработка запросов и шаблоны Jinja, а работу с базой, формы и авторизацию подключают отдельными расширениями. Flask развивает сообщество Pallets, код открыт по лицензии BSD-3-Clause.

    Заказчик чаще всего слышит про Flask в двух ситуациях. Разработчик предлагает «быстро сделать API на Flask» для бота, калькулятора или обмена с CRM. Или выясняется, что внутренний сервис компании, написанный когда-то одним программистом, работает на Flask, и теперь его надо дорабатывать. В обоих случаях полезно понимать, что «микро» тут значит на самом деле.

    Что значит «микро» во Flask

    В документации Flask прямо сказано: «микро» не значит, что приложение помещается в один файл или что фреймворку чего-то не хватает. Это значит, что ядро простое, а большинство решений остаётся за командой. Слоя работы с базой и библиотеки форм во Flask нет и не будет: их берут из расширений и сторонних библиотек, чаще всего SQLAlchemy для базы.

    Минимальное приложение выглядит так:

    from flask import Flask
    app = Flask(__name__)
    
    @app.route("/api/status")
    def status():
        return {"status": "ok"}

    Пять строк, и сервер отвечает на адрес /api/status. Отсюда и популярность Flask: на нём быстро стартовать. Обратная сторона в том, что каждый проект на Flask собран по-своему. Один разработчик взял SQLAlchemy и Flask-Login, другой написал авторизацию сам, третий разложил код в один файл на 3 000 строк.

    Схема приложения на Flask: ядро с маршрутами и шаблонами Jinja, расширения для базы и входа, задачи, которые решает команда
    Что даёт Flask, а что добавляет команда

    Для каких задач Flask хватает

    • Небольшое API: приём заявок с сайта, вебхуки от платёжного сервиса или CRM, бэкенд для чат-бота.
    • Внутренний инструмент: страница с отчётом, загрузка прайса, калькулятор для менеджеров.
    • Обёртка вокруг модели машинного обучения или скрипта на Python, которую надо открыть по HTTP.
    • Прототип, который проверяют на нескольких пользователях, прежде чем делать полноценный продукт.
    • Портал с кабинетами, ролями и админкой для менеджеров: всё это на Flask придётся собирать вручную.
    • Сайт компании или магазин, где тексты и товары правит маркетолог: тут нужна CMS.

    Flask, Django и FastAPI: что под какую задачу

    FlaskDjangoFastAPI
    Что в коробкеМаршруты, шаблоны, остальное расширениямиORM, админка, формы, авторизацияAPI с проверкой данных и автодокументацией
    Под какую задачуНебольшие сервисы и API, прототипыПорталы, кабинеты, контентные проектыAPI для фронтенда и мобильных приложений
    Асинхронный кодЕсть, но каждая такая функция идёт в отдельном потокеПоддерживает частичноИзначально асинхронный
    Насколько похожи проекты разных командСильно различаютсяПохожи, структура заданаСредне

    Про асинхронность Flask честно пишет в документации: асинхронные функции он выполняет в отдельном потоке, и это медленнее, чем у фреймворков, изначально построенных на ASGI. Если сервис будет держать много одновременных долгих запросов к внешним API, на это стоит смотреть до старта.

    Долгие задачи вроде рассылки или выгрузки в 1С в любом из трёх фреймворков выносят в фоновую очередь, обычно Celery.

    Что проверить, если у вас уже есть проект на Flask

    Чек-лист проверки проекта на Flask: расширения, версия, WSGI-сервер, Nginx, хранение секретов, тесты и описание API
    Что проверить в проекте на Flask
    • Список зависимостей (requirements.txt или pyproject.toml): какие расширения стоят и обновлялись ли они. На октябрь 2026 года актуальна ветка Flask 3.1.
    • Как приложение запущено на сервере. Встроенный сервер разработки Flask в документации запрещено использовать на боевом сайте: он не рассчитан на безопасность и нагрузку. В продакшене нужен WSGI-сервер вроде Gunicorn или Waitress, а перед ним Nginx.
    • Есть ли тесты и описание API. Без них новый разработчик будет разбираться в чужой сборке неделями.
    • Где хранятся секретный ключ, пароли от базы и токены. Им место в переменных окружения, а не в коде.

    Если сервис разросся и в нём появились роли, кабинеты и самописная админка, это повод обсудить перенос на Django. Переписывать ради моды не нужно: небольшое API на Flask спокойно живёт годами.

    Запуск, расширения и переезд с Flask

    Как запустить Flask-приложение на хостинге или своём сервере?

    Flask-приложение запускают через WSGI-сервер, например Gunicorn, Waitress или mod_wsgi, а перед ним обычно ставят Nginx или Apache. Подойдёт VPS или хостинг с поддержкой Python. Если у вас обычный PHP-хостинг, уточните у провайдера, умеет ли он запускать Python-приложения.

    Почему в заголовках ответа сайта виден Werkzeug?

    Werkzeug в заголовке Server обычно отдаёт встроенный сервер разработки Flask, который документация запрещает ставить на боевой сайт. Попросите перевести запуск на WSGI-сервер.

    Чем расширения Flask отличаются от встроенных модулей Django?

    Расширения Flask пишут разные авторы, и каждое обновляется в своём темпе, а модули Django выходят вместе с фреймворком и проверены на совместимость. Поэтому при обновлении Flask-проекта приходится отдельно проверять каждое расширение.

    Когда проект на Flask пора переносить на Django или FastAPI?

    На Django переходят, когда в сервисе появились кабинеты, роли и админка, которые команда пишет вручную. На FastAPI смотрят, если проект стал чистым API с большим числом одновременных запросов к внешним сервисам. Пока Flask-приложение маленькое и стабильное, переезд обычно не окупается: проще навести порядок в зависимостях, добавить тесты и описание API, а к вопросу вернуться, когда появятся новые крупные задачи.

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

    Источники

    • Flask: официальная документация, разделы Design Decisions in Flask и Deploying to Production
    • Flask: журнал изменений (Changes)
    • Pallets: репозиторий pallets/flask и лицензия BSD-3-Clause

    Остались вопросы по теме «Flask»?

    Напишите нам в Telegram или MAX. Ответит специалист, который отвечает за эту тему, или руководитель проектов в рабочее время.

    Сергей ЧерняковОтвечает по темеСергей ЧерняковWeb-разработчик

    Посчитайте стоимость проекта за 2 минуты

    Калькулятор соберёт смету по нашим тарифам: сайт, дизайн, интеграции и поддержка.