flask python что это такое

Почему вам стоит выбрать фреймворк Flask для своего следующего проекта

Авторизуйтесь

Почему вам стоит выбрать фреймворк Flask для своего следующего проекта

Senior Python Developer в Akvelon

Flask — фреймворк для создания веб-приложений на языке программирования Python, использующий набор инструментов Werkzeug, а также шаблонизатор Jinja2. Относится к категории так называемых микрофреймворков — минималистичных каркасов веб-приложений, сознательно предоставляющих лишь самые базовые возможности.

Flask зависит от некоторых внешних библиотек — таких как Werkzeug и Jinja2.

Werkzeug — это инструментарий для WSGI, стандартного интерфейса Python между веб-приложениями и различными серверами. Он предназначен как для разработки, так и развёртывания.

Пример минимального приложения на Flask «Hello World!»:

Пример приложения с шаблонизатором на Flask:

Встроенные фичи

Применение Flask

Сообществом поддерживается серия пакетов-расширений для Flask. Их название обычно начинается с flask-, например, flask-login, flask-sqlalchemy, flask-wtf.

Flask является конструктором, поэтому все дополнительные фичи придётся устанавливать вручную. Фреймворк очень хорошо подходит для небольших проектов, работающих в основном со статическим контентом. Также подходит для создания микросервисов. Из-за отсутствия встроенного ORM позволяет выбрать подходящий под ваши нужды. Де-факто используют SqlAlchemy.

Flask 2.0

С мая 2021 года Flask начал обновляться и внедрять асинхронный режим работы. Синтаксис вы можете увидеть ниже:

Источник

Что это такое? Простое WSGI-приложение

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

Для тех кто не совсем знаком с принципом взаимодействия между клиентом (браузером) и фреймворком, установленном на сервере, опишу в двух словах этот процесс.

Когда пользователь вводит в браузер строку запроса, например, vk.com, то от браузера отправляется запрос к серверу, где расположен и работает этот сайт. Здесь мы отложим в сторону вопрос маршрутизации и DNS-серверов, сейчас это неважно, главное, что сеть Интернет так устроена, что маршрутизаторы «знают» куда направлять запросы, если они относятся к работающим сайтам.

Сервер постоянно находится в режиме ожидания очередного запроса и как только он приходит, формирует ответ клиенту, как правило, в виде HTML-документа. Этот документ возвращается в браузер и пользователь видит на экране устройства заветную страницу.

Но где же во всей этой схеме фреймворк? В действительности он установлен на сервере. Так как это обычный компьютер (ну может не совсем обычный, но принцип тот же), то на нем установлено соответствующее программное обеспечение. Мы, опять же, не будем здесь глубоко вдаваться в подробности, скажу лишь, что на них часто устанавливают Linux-подобные ОС (благодаря их надежности), затем программу под названием веб-сервер (часто это Apache или Nginx) и уже он отдает обработку запроса конкретному фреймворку:

Здесь WSGI (Web Server Gateway Interface) — стандарт взаимодействия между Python-программой, выполняющейся на стороне сервера, и самим веб-сервером, например Apache. Фактически, это интерпретатор Python, который запускает WSGI-приложение, написанное на Flask.

При поступлении запроса активизируется WSGI-приложение, выполняется определенный обработчик, который еще называется «Представление» и реализованный в виде функции на языке Python. Соответственно, если приходит сразу несколько запросов, то одна и та же функция-обработчик может быть запущена в параллельных потоках. Многопоточность – это норма для фреймворков, поэтому, работая с представлениями во Flask, всегда следует это учитывать.

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

Теперь мы можем написать свое первое WSGI-приложение. В самом простом варианте оно выглядит так:

Вначале идет импорт класса Flask, который, фактически и формирует это приложение. Далее, мы создаем экземпляр этого класса и первым аргументом должны указать имя нашего приложения. Если вся программа пишется в одном файле, то следует передавать директиву __name__, которая в случае импорта будет содержать имя текущего файла, а в случае самостоятельного запуска – значение «__main__». Для Flask это имеет принципиальное значение, в частности, от этого зависит где искать подкаталоги с шаблонами и статичными документами.

После этого выполняется запуск фреймворка методом run и в качестве параметра указывается debug=True, чтобы мы в браузере видели все ошибки, которые будут возникать при разработке сайта-приложения. Конечно, после его создания, здесь следует прописать debug=False, чтобы случайные ошибки реальный пользователь уже не видел.

И, наконец, условие. Зачем оно? Смотрите, когда мы непосредственно запускаем наш модуль, то директива __name__ будет принимать значение «__main__» и будет запущен локальный веб-сервер для отладки текущего приложения. Если же модуль запускается, например, на удаленном сервере, то нам не нужно запускать еще один сервер. В этом случае директива __name__ будет принимать имя данного модуля и строчка app.run выполнена не будет. То есть, мы это условие прописали с целью запуска приложения непосредственно на локальном устройстве.

Соответственно, как только фреймворк запущен, у нас активизируется локальный веб-сервер и мы можем в браузере создавать запрос, используя вот такой начальный адрес:

Читайте также:  hybrid capture что это

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

Все верно, так и должно быть, так как мы в программе не создали еще ни одного представления. Сделаем и это, добавим его:

Здесь используется специальный декоратор route, который создает обертку вокруг нашей функции index, которая будет активизироваться при обращении к главной странице сайта, то есть, по запросу http://127.0.0.1:5000/

Запустим программу, обновим страницу и теперь в браузере видим то, что возвратила функция index:

Часто к главной странице обращаются еще по index, то есть:

Чтобы одну и ту же страницу отобразить по нескольким URL-адресам, следует добавить несколько конструкций route:

Соответственно, для любого другого адреса мы также можем добавить свой отдельный обработчик, прописав еще один декоратор route:

Теперь на нашем сайте как бы две страницы: главная и /about – о сайте. Причем, наши обработчики возвращают HTML-документ и все теги будут соответственно отображаться на странице в браузере.

Итак, на этом занятии мы с вами сделали первые шаги в понимании работы Flask и построили очень простое WSGI-приложение.

Видео по теме

Flask #1: Что это такое? Простое WSGI-приложение

Flask #2: Использование шаблонов страниц сайта

Flask #3: Контекст приложения и контекст запроса

Flask #4: Функция url_for и переменные URL-адреса

Flask #5: Подключение внешних ресурсов и работа с формами

Flask #7: Декоратор errorhandler, функции redirect и abort

Flask #8: Создание БД, установление и разрыв соединения при запросах

Flask #9: Добавление и отображение статей из БД

Flask #10: Способ представления полноценных HTML-страниц на сервере

Flask #11: Формирование ответа сервера, декораторы перехвата запроса

Flask #12: Порядок работы с cookies (куками)

Flask #13: Порядок работы с сессиями (session)

Flask #14: Регистрация пользователей и шифрование паролей

Flask #15: Авторизация пользователей на сайте через Flask-Login

Flask #16: Улучшение процесса авторизации (Flask-Login)

Flask #17: Загрузка файлов на сервер и сохранение в БД

Flask #18: Применение WTForms для работы с формами сайта

Flask #19: Обработка ошибок во Flask-WTF

Flask #23: Операции с таблицами через Flask-SQLAlchemy

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

Источник

Flask. Наполняем «флягу» функционалом

Предисловие

В прошлом году решил для себя вплотную познакомиться c Python, а в последствии перебраться на него с PHP. На данный момент моя стезя — веб-разработка, а потому осваивать новый язык я начал именно со стороны веба, в частности, с обзора доступных фреймворков и проектов на них. Познакомившись с возможностями TurboGears, web2py, Django, я всё таки поддался «тренду» и погрузился в мир Django.

На протяжении почти года я честно пытался подружиться с ним. Написал несколько простеньких проектов, но монструозность фреймворка отпугивала, обилие «батареек» путало выбор, а с некоторыми ограничениями не хотелось мириться. Душа требовала лаконичности и однозначности, что в конечном счете привело меня к знакомству с Flask. Изучив документацию по фреймворку и смежным проектам (Jinja2, Werkzeug), я проникся идеологией и стал вплотную изучать фреймворк.

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

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

Структура и конфигурация

Для каждого проекта я придерживаюсь типовой структуры, описанной ниже. Всё достаточно тривиально и знакомо программистам Django:

А его применение так:

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

Расширения

Flask-SQLAlchemy

Любое серьезное приложение использует базы данных. Данное расширение дружит Flask с самой популярной на Python ORM-библиотекой — SQLAlchemy, позволяя использовать любые поддерживаемые ей СУБД, а также отображение таблиц в объекты Python, аналогично Django. Впрочем, SQLAlchemy позволяет обойтись и без ORM.

Flask-Script

Добавляет поддержку обслуживающих проект скриптов: запуск dev-сервера, миграции баз данных, cron-задачи и тому подобное. Следуя рекомендациям, я создаю для каждого проекта файл manage.py, где добавляются все необходимые для обслуживания команды. По-умолчанию доступна команда runserver. Запуск команд осуществляется следующим образом:

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

Flask-Migrate

Позволяет настроить миграции для ORM SQLAlchemy. Пакет предоставляет класс MigrateCommand, который можно использовать в связке с вышеописанным расширением Flask-Script. Для использования миграций необходимо подключить команду(пример выше), произвести начальную инициализацию, выполнив manage.py db init, затем использовать действия migrate, upgrade и downgrade данной команды для управления миграциями. Стоит отметить, что список действий для команды и их краткое описание можно получить, выполнив manage.py db help.

Flask-WTF

Реализует привязку к WTForms — замечательной библиотеке для работы с формами. Опять же, налицо аналогия с Django. В коробке: солидный набор классов полей и валидаторов для них, наследование, вложенные формы и многое другое.

Также есть расширение wtforms-alchemy для создания форм на основе моделей SQLAlchemy. Наткнулся на него совсем недавно, посему опыта работы пока нет. Впрочем, думаю, и здесь применима аналогия с Django.

Flask-Login

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

Читайте также:  какой лекарственный препарат создан с использованием методов генной инженерии

Flask-Bcrypt

Добавляет функционал для хеширования и проверки паролей.

Flask-Assets

Дружит Flask с библиотекой webassets, позволяя невероятно изящно работать с ресурсами проекта. Умеет объединять ресурсы в пакеты, компилировать scss(sass) и less, минифицировать js и css и удобно подключать их в шаблонах.

Указав в пакете(Bundle) параметр filters, мы заставим пропустить файлы пакета через заданный фильтр(ы). В нашем случае файлы минифицируются и объяденяться в один. Некоторые фильтры потребуют установки дополнительных python-модулей.

Если в конфигурации задан параметр ASSETS_DEBUG = True, то файлы пакетов не будут пропускаться через фильтры и склеиваться, а в шаблоне для каждого файла будет сгенерирован отдельный url.

P.S. При достаточно большом количестве ресурсов, следует вынести функционал по формированию пакетов(Bundle) и их регистрации в отдельный файл — например, assets.py.

Flask-DebugToolbar

Какая разработка обойдется без удобного дебаггера? Расширение добавляет debug-панель, портированную из Django, с исчерпывающей информацией о запросе. Панель отображается при заданном в конфигурации параметре DEBUG = True.

Источник

Фреймворк Flask в Python

Прежде всего, нам нужно установить модуль flask. Вы можете сделать это либо из командной строки, либо с помощью IDE. Я использую PyCharm Community Edition 2017.2. Итак, я установлю Flask с помощью этой IDE.

Затем откройте PyCharm, щелкните файл> настройки. Затем разверните проект и щелкните Project Interpreter. Вы увидите следующее:

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

После этого появится окно Доступный пакет. В строке поиска введите Flask, и он появится.

Нажмите на Flask и в нижней части окна нажмите Установить. Flask будет установлен на ваш питон, если вы подключены к Интернету.

Вы можете установить модуль flask, используя команду pip через команду ниже.

Итак, наша установка модуля flask завершена. Теперь приступим к кодированию.

Первая веб-страница

Создайте новый проект с именем FlaskTutorial. Затем я создаю файл с именем Main.py. В этом файле у нас есть следующий сегмент кода:

Затем запустите файл, и в журнале консоли вы увидите следующее:

Теперь откройте браузер и скопируйте и вставьте URL-адрес (https://127.0.0.1:5000/), который отображается в консоли. Тогда вы получите ответ в формате html, как на изображении ниже.

Итак, это наша основная веб-страница, обслуживаемая Python.

Пояснение

В самой первой строке мы импортировали класс Flask модуля flask.

Тогда @ app.route() – это декоратор, дополняющий функцию index().

И мы устанавливаем URL-адрес индексной страницы только как ‘/’.

Функция index() возвращает строку, которую мы видим на веб-странице. Здесь мы также можем вернуть html-код. Наконец, мы проверяем, работает ли __main__ напрямую или нет. Если да, запустите приложение. Потом видим результат в браузере.

Инструкция по Flask

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

Основная функция этого html-файла заключается в создании формы с двумя полями ввода и кнопкой отправки. Обратите внимание, что в теге формы мы написали action = «/ FlaskTutorial». Об этом мы поговорим позже. Прямо сейчас просто запомни это. Все остальное как обычно для html файла.

Теперь мы хотим сделать то, что делает кнопка отправки. Кнопка «Отправить» отправит адрес электронной почты в другой файл Html с именем success.html, который покажет адрес электронной почты с сообщением об успешном завершении.

Теперь напишем код success.html, как показано ниже.

Обратите внимание, что в теге body есть двойная фигурная скобка. В этом электронном письме содержится значение, которое отправляется со страницы входа. Все остальное – как обычный html-код.

Теперь снова вернемся к файлу Main.py, мы должны написать следующий код.

Обратите внимание, что мы добавили еще один маршрут с именем FlaskTutorial. Он принимает другой аргумент с именем methods. В функции возврата мы отправили электронное письмо с именем аргумента, которое мы получаем из текстового поля login.html с помощью action = / FlaskTutorial, и мы встроили его в файл success.html.

Вот как вы можете отправлять данные из одного HTML-файла в другой HTML-файл с помощью фреймворка Flask.

Вы также можете отправить эти данные в свою базу с помощью mysql. Чтобы написать код Python в html-файле, вы должны начать с <% # некоторых операторов для вставки значений в базу данных%>.

Источник

Самые популярные веб-фреймворки Python: Django vs Flask

Планируете создать сайт на Python? Тогда вы наверняка слышали про Django и Flask. Эти два веб-фреймворка наиболее популярны в разработке на Python, хотя вообще фреймворков существует гораздо больше. Вопрос в том, какой из них вам лучше использовать?

Цель данной статьи — в общих чертах рассказать, как работают обе эти платформы и какие у них есть сходства и различия, а также осветить некоторые моменты, которые следует учитывать при выборе между ними.

Краткое введение

Первоначально приложения на Python создавались с использованием интерфейса командной строки. И запускались они либо из командной строки, либо из сценариев оболочки. Конечно, хотелось делать с Python несколько больше, чем просто автоматизировать задачи и управлять рабочими процессами. Поэтому вскоре возникла необходимость в веб-фреймворках.

Django

Этот веб-фреймворк Python отлично подойдет для ограниченных во времени перфекционистов.

Django — полноценный MVC-фреймворк. Разработка на нем основана на подходе «все включено»: разработчик может создавать веб-сайты без сторонних библиотек и инструментов. Начиная с первого релиза 15 июля 2005 года, Django разрабатывается и управляется Django Software Foundation (DSF). Он бесплатный, имеет открытый исходный код, к тому же постоянно обновляется.

Flask

Flask — это микро-фреймворк Python, в основе которого лежит идея делать одно дело за раз и делать его хорошо. Первый релиз Flask состоялся 1 апреля 2010 года. Создатель этого фреймворка — австрийский разработчик Армин Ронахер.

Читайте также:  какой нации конор макгрегор

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

Сравнение: Django vs Flask

Ниже приводится подробное сравнение Flask и Django с использованием следующих фокторов:

Популярность: использование и примеры внедрения

Django и Flask используют несколько ведущих веб-сайтов. Статистика GitHub и других сайтов показывает, что Django более популярен, чем Flask. Эта популярность объясняется только тем, что разработчики используют надежные ресурсы Django для быстрого создания и развертывания сложных веб-приложений. А Flask разработчики выбирают для ускорения разработки веб-сайтов, использующих фиксированный контент.

Среди известных проектов, основанных на Django, можно назвать Bitbucket, Eventbright, Instagram, Pinterest. А Flask используют LinkedIn, Netflix, Twilio, Uber.

Документация и удобство навигации

Flask предоставляет обширную документацию, которая охватывает развертывание, установку, инструкции по быстрому запуску и подробные руководства. Также Flask очень просто установить — при помощи пакетного менеджера pip.

Данная команда устанавливает Flask с основными пакетами. Запускать код на Flask также довольно просто. Например, выведем на экран сообщение «Hi Welcome». Все, что для этого требуется, это создать экземпляр класса Flask, за которым следует маршрут, отображающий строку «Hi Welcome».

Документация Django намного шире, чем у Flask, что неудивительно ввиду его сложности.

Django тоже можно быстро установить с помощью пакетного менеджера pip.

Запуск кода в Django предполагает использование встроенной команды для создания проекта и другой команды для создания приложения. Это вполне удобно, так как Django включает готовую к использованию структуру каталогов.

Гибкость использования

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

Концепция Django «все включено» помогает разработчикам создавать множество веб-приложений без сторонних библиотек и инструментов. Однако в Django отсутствует опция внесения изменений в предоставленные модули и, следовательно, разработчики создают веб-приложения, используя только встроенные функции. Это означает, что если разработчик захочет использовать другую библиотеку для функции, которая уже есть в Django, это будет нелегко.

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

Система маршрутизации

Очень важное значение для любого веб-приложения или веб-сайта имеет система маршрутизации. Именно она создает URL-адреса и определяет, что отображается при загрузке URL-адреса.

Для Django же применяется подход «все включено», что упрощает разработчикам выполнение основных задач веб-разработки, таких как миграция схемы базы данных, маршрутизация URL-адресов и аутентификация пользователей. В Django также ускоряется загрузка пользовательского веб-приложения, поскольку существует инструмент начальной загрузки, встроенный механизм шаблонов и система ORM.

Механизм создания шаблонов

Все веб-приложения имеют пользовательский интерфейс (frontend), который поддерживает взаимодействие с пользователем. Поскольку веб-приложения не статичны, они используют разные подходы для динамической генерации HTML-страниц. Django и Flask предлагают захватывающие механизмы создания подобных шаблонов.

Flask разработан при помощи шаблонизатора Jinja2. Это современный и удобный для дизайна шаблон, позволяющий разработчикам моделировать динамические веб-приложения с помощью интегрированной изолированной среды. Шаблоны Jinja2 содержат не только теги, но и переменные. Еще одна ключевая характеристика шаблонов Flask — это их наследование. Ниже приведены примеры наиболее часто используемого синтаксиса Jinja2:

Django использует встроенный механизм шаблонов, позволяющий разработчикам легко определять слой веб-приложения, видимый пользователю. Кроме того, разработчики могут использовать язык шаблонов Django (DTL) для написания шаблонов при разработке пользовательского интерфейса. Синтаксис шаблонов в Django включает:

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

Наличие админки

В системе администрирования Django использует технологию ORM для связывания структуры каталогов с базой данных. Это улучшает опыт разработки при помощи Django, поскольку добавляет универсальности: несколько проектов могут иметь одинаковую структуру каталогов.

Во Flask нет этого функционала, и если вам нужна ORM, вам может потребоваться установка пользовательских модулей. Это, в частности может потребоваться при использовании MongoDB, SQLAlchemy, SQLite и ряда других баз данных. Как видите, здесь есть компромисс между гибкостью и простотой использования. Django поставляется с большинством технических компонентов, необходимых для создания веб-сайта. А Flask зато позволяет пользователю принимать большинство решений самостоятельно.

Скорость разработки

Фреймворк Django, как известно, обеспечивает высокую скорость разработки сложных веб-приложений. Объясняется это тем, что он предоставляет полный набор всех основных функций и все необходимые инструменты для реализации. А простота Flask позволяет опытным разработчикам создавать небольшие приложения в короткие сроки.

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

Выводы

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

Основные различия между Django и Flask:

Мы надеемся, что наша статья поможет вам принять осмысленное решение по выбору фреймворка.

Источник

Сказочный портал