Что такое фреймворк Flask для Python и как его используют разработчики
![]()
Когда речь заходит о веб-фреймворках на Python, то можно смело сказать, что Django и Flask – это два самых популярных.
Мы уже писали про фреймворк Django, так что теперь давайте посмотрим на его младшего (но не менее мощного) брата.
Итак, что же такое Flask? Flask – это микофреймворк для разработчиков, который позволяет им быстро и просто создавать и масштабировать веб-приложения. Выяснение того, как они это делают, займет чуть больше времени.
Для начала мы кратко рассмотрим основные способы использования Python веб-разработчиками в цифровых системах, а затем поговорим о самом микрофреймворке Flask.
А далее мы рассмотрим некоторые плюсы и минусы его использования и сравним Flask с его более известным собратом Django.
Как разработчики используют Python?
Язык программирования Python – это область деятельности не только для ученых и аналитиков данных. Его гибкость – одна из ключевых причин, по которой огромное количество веб-разработчиков изучают его и профессионально используют во всех видах проектов.
Преимущественно они используют его для создания мощных серверных веб-приложений, которые могут быстро обрабатывать данные. Они также используют его для таких областей, как сбор данных, машинное обучение и искусственный интеллект.
Разработчикам нравится простота использования и эффективность Python, поскольку он позволяет создавать быстро загружаемые и безопасные веб-сайты. Еще до этапа развертывания – Python идеально подходит для проектирования и тестирования прототипов, позволяя выполнять итерации и разработку, быстро достигая финального этапа разработки готового продукта.
Если вам нужны более конкретные примеры, то мы нашли некоторые из наиболее известных примеров использования Python от таких компаний, как Netflix, Uber и Spotify.
На самом деле есть очень много преимуществ изучения и использования Python для веб-разработки. Когда речь заходит о разработке веб-приложения на Python, то тут есть много разных вариантов, но наверху этого списка находятся именно Django и Flask.
А сейчас давайте продолжим и узнаем поподробнее о втором – о Flask.
Что такое Flask?
Flask входит в топ-20 самых востребованных веб-фреймворков согласно опросу Stack Overflow 2022 года – неплохо для микрофреймворка.
Откуда такое признание? В основном от того, что для своей работы он не полагается на какие-либо другие инструменты или программные библиотеки. Flask, которому уже немного больше 11 лет, примерно того же возраста, что и более известный веб-фреймворк Django.
Из-за того, что язык Python был назван в честь комедийной труппы Monty Python, то и весь проект Flask изначально задумывался как первоапрельская шутка. Однако Армин Ронахер, создатель, понял, что то, что задумывалось как шутка, может действительно превратиться во что-то реально полезное – подходящую основу для создания веб-приложений. Его название – это обыгрывание названия более раннего веб-фреймворка Bottle.
Flask – это то, что известно как фреймворк WSGI. Оно произносится как «виски» и обозначает Web Server Gateway Interface (интерфейс шлюза веб-сервера). По сути, это способ для веб-серверов передавать запросы веб-приложениям или платформам. Flask использует для работы внешнюю библиотеку WSGI, а также шаблонизатор Jinja2.
Это готовый фреймворк, что означает, что вы можете без проблем перейти на работу с ним – это одно из его основных преимуществ.
Итак, теперь мы знаем, что такое Flask, а значит, пришло время посмотреть, как его используют разработчики.
Преимущества и недостатки Flask
Масштабируемость
Размер – это все, и статус Flask в качестве микрофреймворка означает, что вы можете использовать его для невероятно быстрого развития технического проекта, такого как веб-приложения. Если вы планируете создать приложение, которое будет начинаться с малого формата, но при этом будет иметь потенциал быстрого роста в том числе и в тех направлениях, которые вы еще не полностью проработали, то Flask – идеальный выбор для вас. Его простота использования и малое количество зависимостей позволяют ему работать бесперебойно даже при масштабировании.
Гибкость
Это основная функция Flask и одно из его самых больших преимуществ. Перефразируя один из принципов дзэн Python, простота лучше сложности, так как ее можно легко перераспределить и переместить.
Это полезно не только с точки зрения того, что ваш проект можно легко продвигать в другом направлении, но это также гарантирует, что структура проекта не рухнет при изменении какой-либо ее части. Минималистичность Flask и его способность разрабатывать небольшие веб-приложения означают, что он даже более гибкий, чем Django.
Легкость в использовании
Как и в случае с Django, способность быстро ориентироваться помогает веб-разработчикам сосредотачиваться только на написании кода, а не на попытках разобраться, как и что работает. Микрофреймворк прост для понимания, и не только экономит веб-разработчикам их время и усилия, но и позволяет им максимально контролировать их код и все, что только можно.
Простота
Когда этот термин используется в отношении какого-либо инструмента или фреймворка, то речь идет о его конструкции – есть несколько составных частей, которые необходимо собирать и собирать повторно, и он не зависит от большого количества программных расширений для функционирования. Такая конструкция дает веб-разработчикам определенный уровень контроля.
Flask также поддерживает модульное программирование, в котором его функциональность можно разделить на несколько взаимозаменяемых модулей. Каждый модуль действует как независимый строительный блок, который может выполнять какую-то часть функциональных возможностей. В общем это означает, что все составные части структуры являются гибкими, подвижными и тестируемыми сами по себе.
Документация
Согласно теории создателя о том, что «хороший план разработки документации на самом деле заставляет вас писать документацию», пользователи Flask могут найти большое количество структурированных примеров и рекомендаций. Это создает хорошие условия для того, чтобы разработчики использовали фреймворк, так как они могут легко ознакомиться с различными аспектами и возможностями инструмента. Документацию Flask можно найти на их официальном сайте.
Небольшое количество инструментов
Конечно же есть и некоторые недостатки в простоте этого микрофреймворка. Главный из них заключается в том, что, в отличие от Django, в Flask нет такого большого количества различных инструментов. Это значит, что разработчикам придется вручную добавлять программные расширения, такие как библиотеки. А при добавлении большого количества таких расширений приложение может начать тормозить из-за большого количества запросов.
Трудность ознакомления с большими приложениями
Из-за того, что разработка приложения с использованием Flask может иметь множество различных тонкостей, веб-разработчик, пришедший к проекту на полпути, может столкнуться с трудностями во время ознакомления с тем, как оно было разработано. Модульная структура микрофреймворка, о которой мы упоминали ранее, может усложнять работу программистов, которым нужно ознакомиться с каждой составной частью.
Затраты на техническое обслуживание
Поскольку Flask является гибким с точки зрения использования технологий, с которыми он может взаимодействовать, то довольно часто компании, использующие Flask, несут дополнительные расходы на поддержку этих технологий. Например, если технология, взаимодействующая с вашим приложением, устареет или перестанет существовать, то компании придется искать новую технологию, которая будет также совместима с вашим приложением. Чем сложнее приложение, тем выше потенциальные затраты на обслуживание и внедрение.
Flask vs Django
Скорее всего, вы уже поняли, что эти двое много чем похожи. Все чаще они упоминаются в одном ряду. И Flask, и Django предназначены для того, чтобы разработчикам было легче начать работу с проектами, а также легче масштабировать их в приложения. Они оба просты в развертывании, оба очень просто проводят модульное тестирование и идут вместе с документацией.
Предоставление веб-разработчикам возможности более продуктивно писать код именно на Python, а не на других языках, во многом объясняет их популярность. Опрос Python-разработчиков, проведенный JetBrains в 2021 году, показал, что Django и Flask находятся в тупиковой ситуации с точки зрения популярности. Так чем же они отличаются?
Применение
Полезный совет, позволяющий понять, что и когда использовать, заключается в следующем: Django подходит для больших проектов и для небольших, которые так и останутся ими, а Flask – для небольших приложений, у которых есть перспектива стать больше.
Django – это монолит, что значит, что он старается быть полноценным универсальным механизмом для вас и ваших потребностей. Из-за такой своей требовательности это может оказаться не очень оптимально для некоторых разработчиков. В качестве альтернативы, как микрофреймворк, Flask может легко и гибко взаимодействовать с другими инструментами, даже с теми, с которыми вы изначально не планировали работать. С Django вам необходимо будет определить масштаб проекта заранее.
Общественная поддержка
Flask имеет гораздо меньшее и менее сплоченное сообщество пользователей в сравнении с Django, поэтому, если у вас возник тот или иной вопрос, то у вас гораздо меньше шансов найти ответ на форуме, так как меньше активных пользователей, которые обращаются за помощью.
Простой способ проверить — зайти на главный веб-форум Stack Overflow. Проверка форума показала, что против 46 966 вопросов с тегом Flask выступают 273 775 вопросов с тегом Django. Это ни в коем случае не означает, что сообщество Flask полностью мертво. Это лишь значит, что это немного более молодой фреймворк, а, соответственно, и его сообщество.
Безопасность
В то время как Django может похвастаться отличными функциями аутентификации и входа в систему для пользователей, Flask не может себе такого позволить. Тем не менее, микрофреймворк поддерживает безопасные cookie-файлы на клиентской стороне. В целом, Django считается «полностью укомплектованным» фреймворком и более безопасным.
Доступ к базе данных
Еще одно ключевое отличие для разработчиков, работающих с базами данных, — насколько Django и Flask поддерживают к ним доступ, в основном объектно-реляционное управление (ORM — Object Relational Management). Объектно-реляционное управление позволяет API легко получать доступ к данным без необходимости писать SQL-команды.
Django поддерживает ORM, что позволяет писать сложные запросы. А вот Flask-разработчикам, к сожалению, придется писать все свои SQL-операторы самостоятельно, что, конечно, может добавить лишней работы.
Стоимость
Flask более гибкий из-за его относительной поворотливости, тогда как Django в целом считается более дешевым в обслуживании с точки зрения эксплуатационных расходов. Мало того, что для работы с Flask требуется дополнительная поддержка из-за ряда технологий, с которыми он работает, так и разработчиков, имеющих опыт работы с ним, найти сложнее, чем тех, кто имел дело с Django.
Если говорить о сравнении и принятии решения как предприятием, так и технической командой, что использовать и для какого проекта, то это действительно зависит от специфики и масштаба самого проекта. Но если вы веб-разработчик, который работает с Python, и пытается решить, с каким фреймворком ему лучше познакомиться, то почему бы не сразу с обоими?
Знания и опыт развертывания проектов с использованием как Django, так и Flask могут значительно повысить ценность ваших навыков (и потенциально повысить вашу зарплату разработчика полного цикла).
Итоги
Итак, вот оно: введение в микрофреймворк Flask, включая то, как его использовать, а также плюсы и минусы. Крайне важно, чтобы технические команды знали и понимали, для каких проектов лучше всего подходит Flask, а какие проекты – это работа для более крупного веб-фреймворка Django. В любом случае, любой веб-разработчик, работающий с Python, должен знать, как работать хотя бы с одним из этих двух популярных инструментов.
Почему вам стоит выбрать фреймворк Flask для своего следующего проекта
Senior Python Developer рассказывает о возможностях Flask и особенностях работы с ним, а также советует, когда стоит использовать этот фреймворк.
Максим Кузнецов
Senior Python Developer в Akvelon
Flask — фреймворк для создания веб-приложений на языке программирования Python, использующий набор инструментов Werkzeug, а также шаблонизатор Jinja2. Относится к категории так называемых микрофреймворков — минималистичных каркасов веб-приложений, сознательно предоставляющих лишь самые базовые возможности.
Flask зависит от некоторых внешних библиотек — таких как Werkzeug и Jinja2.
Werkzeug — это инструментарий для WSGI, стандартного интерфейса Python между веб-приложениями и различными серверами. Он предназначен как для разработки, так и развёртывания.
Пример минимального приложения на Flask «Hello World!»:
Пример приложения с шаблонизатором на Flask:
Встроенные фичи
- Сервер разработки и отладчик
- Интегрированная поддержка модульного тестирования
- Отправка запросов RESTful
- Использование шаблонизатора Jinja2
- Поддержка безопасных файлов cookie (сеансы на стороне клиента)
- 100% соответствие WSGI 1.0
- Unicode
- Обширная документация
- Совместимость с Google App Engine
- Расширения для улучшения желаемых функций
Применение Flask
Сообществом поддерживается серия пакетов-расширений для Flask. Их название обычно начинается с flask-, например, flask-login, flask-sqlalchemy, flask-wtf.
Flask является конструктором, поэтому все дополнительные фичи придётся устанавливать вручную. Фреймворк очень хорошо подходит для небольших проектов, работающих в основном со статическим контентом. Также подходит для создания микросервисов. Из-за отсутствия встроенного ORM позволяет выбрать подходящий под ваши нужды. Де-факто используют SqlAlchemy.
Flask 2.0
С мая 2021 года Flask начал обновляться и внедрять асинхронный режим работы. Синтаксис вы можете увидеть ниже:
from flask import Flask app = Flask(__name__) @app.get('/') async def ping(): return if __name__ == '__main__': app.run(host='0.0.0.0')
Когда стоит использовать Flask
- Если нужен небольшой бэк.
- Если хотите сделать свой pet-проект.
- Если вы не знакомы с асинхронностью.
- Если хотите получить больше опыта и возможностей для обучения.
- Если вам нужно больше контроля над используемыми компонентами.
Полезные ссылки
- Документация Flask на английском языке
- Документация Flask на русском языке
What the flask?

Вообще-то, это картинка от wtforms, но у меня гимп почему-то не запускается.
Эту статью я пишу в баре. Очень хочется похоливарить, но бармен на меня смотрит круглыми глазами, а кальянщик просто улыбается и мотает головой.
Однажды, меня спросили: что плохого во flask? Тогда меня полностью устраивал этот милый фреймворк. Поработав с ним какое-то время, я написал все, что думаю, в рабочий слак, на что мне ответили: «Мурад, будь добрее». Вообще, я добрый и пушистый, но wtf?!
Стоит отметить, что я являюсь большим поклонником работы Армина. Его пакеты используются во многих мои проектах. А еще он невероятная заноза в сообществе Python. И это хорошо.
Flask
Flask — это обертка над очень крутыми обособленными проектами. Некоторые сравнивают его с джангой. Я хз почему.
Если попытаться описать все проблемы фласка в двух пунктах:
Все. Дальше можно не читать. Но если все еще не понятно, листаем дальше.
Blueprints
Если в джанге все приложения подключаются в INSTALLED_APPS , то во фласке используется концепция blueprints . Этакое приложение и обособленный неймспейс урлов в одном флаконе:
from flask import Flask from yourapplication.simple_page import simple_page app = Flask(__name__) app.register_blueprint(simple_page, end_point='/simple_page')
Далее, можно роутить урлы так: url_for(‘simple_page.index’) .
Вложенность
А ее нет. Нельзя просто так взять и сделать вложенный неймспейс. В сети можно найти «решения», но здесь я буду рассматривать только коробочный фласк, потому что написать-то можно все.
Импорты
Когда вы делаете так в продакшен коде:
if foo == 3: do_stuff(foo)
Где-то в мире грущу я! Берегите меня, выносите это в сеттинги.
from myapp import app class Foo(FlaskForm): choices = SelectField(choices=app.conf.FOO_CHOICES)
Концептуально. Но работать не будет. Потому что пару строчек назад мы импортировали пакет в myapp и навечно заказали себе путь туда.
Погодите, должен быть выход! Ага!
from flask import current_app
И это не работает. Потому что current_app доступен только в контектсте реквеста!
— Вынеси это наконец в файл сеттингов приложения, больной ублюдок! — голос из зала.
— А как я буду их подменять на проде или тестовом, а?
Кстати, для джанги на этот случай у меня есть специальная батарейка.
Просто представьте себе прекрасный дивный мир, где django.conf.settings доступен только в контексте реквеста!
flask.g
Нельзя не пошутить про одноименную точку. А главное, ее не нужно искать, она всегда тут: flask.g . Бада-бум-тсс!
Вот поэтому Армин — мой кумир!
В нее можно пробросить все необходимое:
@app.before_request def before_request(): g.locale = get_locale() g.foo = foo
Однако, это будет работать только в контексте реквеста, как и любые другие магические объекты фласка.
Роутинг урлов и их методы
У меня на сайте есть такой кусок урлов:
bp.add_url_rule('/api/v1/', view_func=ApiView.as_view('api_view')) . bp.add_url_rule('//', view_func=PageView.as_view('page_view'))
ApiView обрабатывает только один метод — POST . Угадайте, что будет если спросить GET ? Ага, 404. Ее обеспечивает вторая вьюшка.
Чтобы получить NOT ALLOWED , нужно явно вернуть 405 в ApiView !
Fask, что с тобой не так?
Стейк!
А. Погодите. Это мне. Омн-омн-омн.
flask-wtf. CSRF
Ох. Допустим, нам нужно отключить проверку в одной вьюхе:
@app.route('/foo', methods=('GET', 'POST')) @csrf.exempt def my_handler(): # . return 'ok'
Значит, нам нужен app . Помните про импорты, да? Ищем выход, лезем в сорцы:
def exempt(self, view): . if isinstance(view, string_types): view_location = view else: view_location = '.'.join((view.__module__, view.__name__)) self._exempt_views.add(view_location) return view
Ура! Можно передать путь до вьюхи (в версии, которая вышла две недели назад)! Пробуем:
csrf.exempt('website.apps.typus_web.views.ApiView')
Не работает. На самом деле (ненавижу это выражение), мы подменили имя вьюхи, когда вызывали ApiView.as_view(‘api_view’) :
csrf.exempt('website.apps.typus_web.views.api_view')
И «все равно», что мы указываем путь до объекта, которого нет. Работает! Не работает.
А знаете почему? Потому что форма. Она ничегошеньки не знает про вьюху:
class ApiForm(ViewForm): . class Meta(ViewForm.Meta): csrf = False
Вот теперь работает.
url_for()
Допустим, вы хотите сделать так:
NAVIGATION = ( (url_for('flatpages:index'), _('Home page')), )
Забудьте. Вне контекста не работает. Наверное, можно сделать свой ленивый объект, в конце-концов, в джанге это тоже не сразу появилось.
flask-testing
Штука, призванная помочь с тестами. Например, можно заглянуть в контекст, который передается в шаблон. А давайте попробуем:
AssertionError: Popped wrong request context.
Ой. Что-то пошло не так. А знаете что? Я вот тоже не знаю.
На самом деле (ненавижу это выражение), я схватил NotImplementedError в одном из методов, которые не переопределил. Но поинт в том, что уронив тесты, вам ни за что не понять в чем причина.
Всякое разное
В процессе ковыряния фласка, нашел несколько моментов:
def jsonify(*args, **kwargs): . if args and kwargs: raise TypeError('jsonify() behavior undefined when passed both args and kwargs') elif len(args) == 1: # single args are passed directly to dumps() data = args[0] else: data = args or kwargs
Здесь что-то происходит. Это все, что я понимаю.
def make_response(*args): if not args: return current_app.response_class() if len(args) == 1: args = args[0] return current_app.make_response(args)
А теперь ягодки:
class Flask(_PackageBoundObject): def make_response(self, rv): status_or_headers = headers = None if isinstance(rv, tuple): rv, status_or_headers, headers = rv + (None,) * (3 - len(rv))
P.S. А чего я один эээ статьи пишу, м? Кто хочет на той неделе, скажем, во вторник (чтобы больше вместить) пойти в бар (в Питере, в районе Звездной). Пишите в инбокс.
P.P.S. Хабр, ты почему не типографишь тексты? Вот, я даже штуку написал!
Уроки Flask Python

Изучение Flask / #1 — Создание веб сайтов на Python
Представляем вам видеокурс по изучению фреймворка Flask Python. За курс мы с вами научимся создавать сайты на Python Flask. Мы изучим работу с данным фреймворком, а также создадим на его основе полноценный веб блог.
Видеоурок
Полезные ссылки:
- Курс по Django ;
- Курс по языку Python ;
- Программа PyCharm .
Информация про Flask
Фреймворк Flask относиться к так званым микрофреймворкам — минималистичные каркасы, которые обеспечивают лишь базовые возможности для реализации той или иной задачи.
Что это означает простым языком? А то, что создать сайт на Flask это очень просто и на изучение фреймворка вы не потратите больше одной недели. Это крутой показатель, но как и в любом деле здесь есть свои плюсы и свои минусы.

К плюсам относится быстрое изучение фреймворка, а к минусам относится его функциональность. За счёт Flask вы уже в ближайшие дни сможете создать свой сайт на языке Python, но при этом если вы захотите сделать сайт по типу Youtube, Google или сайта, который требует взаимодействия с различного рода API, то данный фреймворк станет не идеальным выбором.
Джанго или Flask?
И здесь мы подходим к ответу на один важный вопрос, который многие начинающие разработчики задают себе перед созданием сайтов на Питон. Какой фреймворк выбрать: Джанго или Flask? Ответить на этот вопрос достаточно просто. Если вас интересует самостоятельная разработка сайтов и вы быстро хотите вникнуть в сферу создания сайтов, то изучайте Flask. Если же времени у вас достаточно и вы не боитесь сложных фреймворков, то вашим выбором станет Джанго.

Курс по языку Джанго есть на нашем сайте и его просмотреть по этой ссылке .
Сейчас мы не будем дискутировать что же круче и что же стоит выбрать. В любом случае, если вы хотите разрабатывать сайты на Питон, то данного курса вам вполне хватит, чтобы войти в эту сферу и начать заниматься делом.
Информация про курс
Итак, в ходе курса мы с вами изучим Flask для начинающих, научимся создавать различные страницы, работать с базой данных и по итогу создадим небольшой веб блог со всем необходимым функционалом.
Также хочу отменить, что прежде чем изучать данный курс вам стоит изучить язык программирования Python. Он есть на нашем сайте по этой ссылке . Также вам стоит изучить языки разметки: HTML и CSS .
Основной файл app.py
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "Hello World" @app.route('/about') def about(): return "About page" if __name__ == "__main__": app.run(debug=True)
Задание к уроку
Установка Flask
Скажите какая команда используется для установки Flask в проект?
Также какая команда используется для установки библиотеки по работе с базой данных?
Посмотреть ответ
Для установки Flask используется команда:
pip install flask
Для установки библиотеки по работе с базой данных используется команда:
pip install flask-sqlalchemy
Получить остальные домашние задания можно после подписки на проект
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца