Что такое flask в python
Перейти к содержимому

Что такое flask в python

  • автор:

Что такое flask в python

Flask является микрофреймворком для создания вебсайтов на языке Python. В основу статьи положен перевод из официальной документации Flask. Поэтому в ней имеется обращение от первого лица, то есть от создателя фреймворка Армина Ронахера.

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

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

На мой взгляд «микро» в фреймворке относится не только к простоте и небольшому размеру базы, но это также может означать тот факт, что он не предлагает вам много проектных решений. Несмотря на то, что Flask использует нечто подобное в виде шаблонизатора, мы не будем принимать подобные решения для вашего хранилища данных или других частей. Тем не менее, для нас термин «микро» не означает, что вся реализация должна вписываться в один файл.

Одним из проектных решений во Flask является то, что простые задачи должны быть простыми; они не должны занимать много кода, и это не должно ограничивать вас. Поэтому мы сделали несколько вариантов дизайна, некоторые люди могут посчитать это удивительным и даже странным. Например, Flask использует локальные треды внутри объектов, так что вы не должны передавать объекты в пределах одного запроса от функции к функции, оставаясь в безопасном треде. Хоть это и очень простой подход, который позволяет сэкономить время, такое решение может вызвать некоторые проблемы для слишком больших приложений, поскольку изменения в этих локальных тредах-объектах могут произойти где угодно в этом треде. Для того, чтобы решить эти проблемы, мы не стали скрывать от вас локальные треды-объекты, вместо этого мы охватываем их и предоставляем вам много инструментов, чтобы сделать работу с ними настолько приятной, насколько это возможно.

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

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

Безопасность

Ваше безопасное веб-приложение можно взломать различными способами, так как веб-программирование — это небезопасное занятие. Вы позволяете пользователям оставлять информацию на сервере, следовательно можно найти способ взломать ваше веб-приложение. Flask защищает вас от наиболее распространенных и известных способов взлома, такие как XSS (cross-site scripting). До тех пор, пока вы сами сознательно не отмечаете опасный html как безопасный, Flask и шаблонизатор Jinja2 защищают вас, но все равно могут найтись способы взломать ваш сайт.

Werkzeug и Flask поддерживают Python 3.

Что такое фреймворк Flask для Python и как его используют разработчики

img

Когда речь заходит о веб-фреймворках на Python, то можно смело сказать, что Django и Flask – это два самых популярных.

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

Flask — это микрофреймворк для создания простого и быстрого проекта на языке программирования Python с возможностью масштабирования до сложных приложений. Понятие «микрофреймворк» означает, что в комплекте нет набора инструментов и библиотек, программист может сам установить их в зависимости от задач.

Освойте профессию
«Python-разработчик»

Кому и когда нужен Flask

Flask используют веб-разработчики на Python. Микрофреймворк подходит для новичков. Позволяет быстро создать веб-приложение, используя только один файл Python. Flask можно использовать при разработке как тренировочных проектов или небольших сайтов, которым не нужен сложный бэкенд, так и API и сложных проектов для электронной коммерции. Ядро фреймворка можно масштабировать под разные задачи. Разработчик должен сам выбрать библиотеки и инструменты, которые хочет использовать. Для этого нужно подключить пакеты-расширения.

Пример веб-приложения, которое показывает «Hello World!»:

from flask import Flask app = Flask(__name__) @app.route(«/») def hello(): return «Hello World!» if __name__ == «__main__»: app.run()

Профессия / 12 месяцев
Fullstack-разработчик на Python

Создавайте веб-проекты самостоятельно

dffsdd (2)

Как работает Flask

Flask Framework использует Jinja2 — приложение для обработки шаблонов — и Werkzeug — инструмент для работы с WSGI (стандартом взаимодействия между Python-программой, которая выполняется на стороне сервера, и самим веб-сервером). Для создания изолированной среды в Python используется модуль Virtualenv.

Веб-фреймворк Flask поддерживает:

  • модульное тестирование — проверку на корректность отдельных модулей исходного кода программы;
  • Google App Engine — мощную платформу для создания и запуска приложения в инфраструктуре Google;
  • RESTfull-архитектуру — соответствующий набор архитектурных принципов для создания гибкой и масштабируемой сети.

Flask защищен от XSS-атак, когда злоумышленник внедряет на страницу вредоносный скрипт, и работает с безопасными cookie. В инструменте Werkzeug предусмотрен простой веб-сервер.

Станьте разработчиком на Python и решайте самые разные задачи: от написания кода до автоматизации процессов

Преимущества и недостатки Flask

Преимущества

  • Считается лучшим веб-фреймворком для создания небольших статических сайтов и легковесных веб-приложений.
  • Можно редактировать большую часть инструментов под задачи.
  • Имеет интуитивно понятный синтаксис и простую структуру.
  • Есть инструменты для отладки и тестирования — unit-тесты, встроенный сервер разработки, обработчик запросов и отладчик.
  • Много подробной документации на русском языке.
  • С новой версии 2.0. поддерживает асинхронность — технологию, которая помогает выполнять процессы без блокирования потока программы. Это повышает производительность и скорость работы.

Недостатки

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

Fullstack-разработчик на Python

Fullstack-разработчики могут в одиночку сделать IT-проект от архитектуры до интерфейса. Их навыки востребованы у работодателей, особенно в стартапах. Научитесь программировать на Python и JavaScript и создавайте сервисы с нуля.

картинка (72)

Статьи по теме:

What the flask?

kdpv

Вообще-то, это картинка от 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. Хабр, ты почему не типографишь тексты? Вот, я даже штуку написал!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *