Фреймворк flask что это

Обновлено: 06.07.2024

Модуль Flask представляет собой микро-фреймворк, но слово "микро" не означает, что веб-приложение, построенное на Flask, должно помещаться в один файл с кодом на Python, хотя, это не запрещено. Или Flask испытывает недостаток в функциональности. Нет, приставка "микро" означает, что Flask придерживаться простого, но расширяемого ядра. Это означает, что Flask не решает за программиста что и как ему делать. При проектировании веб-приложений на Flask программист все решения принимает сам: например, какие паттерны использовать, какую базу данных подключить, использовать ли ORM или работать на чистом SQL. Flask не содержит больших слоев абстракции и по этому быстр. В общем Flask - это всё, что нужно, и ничего лишнего.

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

Содержание.

Установка веб-фреймворка Flask в виртуальное окружение.

Веб-фреймворк Flask зависит от двух внешних библиотек - это Werkzeug и Jinja2 . Библиотека Werkzeug - это инструментарий для WSGI - стандартного интерфейса Python между веб-приложениями и различными серверами и предназначен как для разработки, так и развёртывания. Модуль Jinja2 занимается обработкой и визуализацией шаблонов с HTML.

Что бы установить Flask в виртуальное окружение, необходимо выполнить следующие инструкции в терминале вашей системе.

Минимальное веб-приложение на Flask.

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

Код выше сохраним в файл с именем mini-flask.py и запустим с помощью Python в виртуальном окружении, куда ранее устанавливался пакет Flask. Внимание! никогда не давайте имя файлу flask.py или директории с веб-приложением (если оно большое), это вызовет конфликт с установленным пакетом Flask.

Далее запускаем файл с кодом минимального приложения.

Если используется Flask 2.0 и выше, то приложение так же можно запустить следующим образом:

Разберем, что здесь происходит: (это необходимо понять)

Как видно из информации, которую выводит сервер отладки при запуске веб-приложения (см. выше), для его остановки, необходимо нажать комбинацию клавиш Ctrl + C .

Публично доступный сервер веб-приложения Flask:

Если используется Flask 2.0 и выше, то сделать приложение общедоступным можно просто добавив --host=0.0.0.0 в командную строку:

Режим отладки веб-приложения Flask.

Существует три способа включить отладку:

Через FLASK_ENV (Если используется Flask 1.1 и выше)

Внимание! Включенный интерактивный отладчик позволяет выполнение произвольного кода Python. Это делает его главной угрозой безопасности, и следовательно режим debug никогда не должен использоваться на "боевых" серверах.

Экранирование HTML.

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

Функцию escape() , показанную здесь, можно использовать вручную. В большинстве примеров она опущена для краткости, но всегда необходимо знать и понимать, как используются ненадежные данные.

URL маршрутизация в веб-приложении Flask.

Ранее говорилось, что для привязки функции к URL-адресу используется декоратор @app.route() . Но это еще не все, можно сделать определенные части URL динамически меняющимися, при этом задействовать несколько правил.

Правила для переменной части URL-адреса.

Для составления динамически меняющихся URL-адресов, необходимо изменяемые части адреса выделять как <variable_name> . Затем эти части передаются в функцию, в виде аргумента с именем variable_name . Также в изменяемых частях может быть использован конвертер, который задает правила следующего вида <converter:variable_name> .

Несколько интересных примеров:

В Flask существуют следующие конвертеры:

  • int : принимаются целочисленные значения;
  • float : принимаются значения с плавающей точкой;
  • path : принимает строки (как по умолчанию), но также принимает слеши;
  • uuid : принимает строки UUID.

Уникальные URL-адреса (301 redirect).

Следующие два правила различаются использованием косой черты в конце URL-адреса.

В первом случае, канонический URL-адрес /projects/ имеет завершающую косую черту ( / в конце адреса), что похоже на папку в файловой системе. Если обратится к URL-адресу без косой черты в конце, то Flask перенаправляет с кодом ответа сервера 301 на канонический URL-адрес с завершающей косой чертой.

Во втором случае, канонический URL-адрес /about не имеет косой черты в конце. Доступ к URL-адресу с косой чертой в конце приведет к ошибке 404 "Not Found".

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

Автоматическое построение (генерация) URL-адресов.

Автоматическое создать URL-адрес для декорированных @app.route() функций, используйте функцию flask.url_for() . В качестве первого аргумента flask.url_for() принимает имя декорированной функции и любое количество ключевых аргументов, каждый из которых соответствует изменяемой части URL-адреса. Если дополнительно указываются переменные, которые отсутствует в изменяемых частях URL-адреса, то все они добавляются к URL в качестве параметров запроса.

В примере использован метод app.test_request_context() , который заставляет Flask вести себя так, как будто он обрабатывает запрос, даже при взаимодействии с ним через интерпретатор Python.

Зачем строить URL-адреса с помощью flask.url_for() , ведь их можно составить при помощи переменных в шаблонах?

  • Использование flask.url_for() часто более понятно (первый аргумент - функция, которая отвечает за страницу), чем жесткое кодирование URL-адресов.
  • Можно изменить URL-адреса за один раз, вместо ручного поиска и изменения жестко закодированных URL-адресов.
  • Автоматическое построение URL-адресов прозрачно обрабатывает экранирование специальных символов и данных Unicode.
  • Сгенерированные пути URL-адреса всегда абсолютны, что позволяет избежать неожиданного поведения относительных путей в браузерах.
  • Если приложение размещено за пределами корневого URL-адреса / , например в /myapplication , то функция flask.url_for() обработает все правильно.

Подключение статических файлов CSS и JavaScript.

Динамическим веб-приложениям также нужны статические файлы - это CSS и JavaScript файлы. Веб-сервер Flask настроен на их обслуживание в директории static . Во время разработки нужно создать папку с именем static в пакете с веб-приложением или рядом с приложением-модулем (приложение состоит из одного файла), и она будет доступна в приложении по URL /static .

Файл должен храниться в файловой системе как static/style.css .

Использование шаблонизатора Jinja2 в приложении Flask.

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

Для визуализации шаблона используется функция flask.render_template() . Все, что нужно сделать, это указать имя подключаемого шаблона и передать переменные (как словарь или как ключевые аргументы) в подключенный шаблон. Вот простой пример того, как визуализировать шаблон:

Flask будет искать шаблоны в папке с шаблонами templates . Итак, если приложение является модулем (веб-приложение поместилось в один файл), то папка templates находится рядом с этим модулем (файлом), если это пакет, то templates находится внутри пакета (директории с веб-приложением):

Случай 1: приложение-модуль.

Случай 2: приложение-пакет.

В шаблонах используйте всю мощь движка Jinja2. Для получения дополнительной информации перейдите к документации по Jinja2.

Вот пример шаблона:

Внутри шаблонов, также есть доступ к объектам flask.request , flask.session и flask.g , а также к функции flask.get_flashed_messages() .

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

В шаблонах включено автоматическое экранирование, следовательно, если переменная содержит HTML, то содержимое будет экранировано автоматически. Если вы доверяете содержимому переменной и знаете, что это будет безопасный HTML (например, он сгенерирован кодом веб-приложения), то можно пометить его как безопасный, используя класс flask.Markup или фильтр шаблона > .

Базовое введение в то, как работает класс Markup :

Локальные переменные контекста запроса.

Данные, которые клиент отправляет на сервер передаются в глобальном объекте request . Этот объект фактически является прокси для объектов, которые в свою очередь являются локальными для определенного контекста, немного запутанно, но это легко понять.

Представьте, что контекст является потоком обработки. Приходит запрос, и веб-сервер решает создать новый поток или что-то еще, т.к. базовый объект может работать с системами, отличными от потоков. Когда Flask начинает обработку внутреннего запроса, он определяет, является ли текущий поток активным контекстом, и связывает текущее приложение и среду WSGI с этим контекстом (потоком). Он делает это так, что одно приложение может вызывать другое приложение без прерывания работы.

Что это значит? По сути, это можно полностью игнорировать, если только не используется модульное тестирование. Код, зависящий от объекта запроса, сломается из-за отсутствия объекта запроса. Решение состоит в том, чтобы самостоятельно создать объект запроса и привязать его к контексту. Самым простым решением для модульного тестирования является использование диспетчера контекста app.test_request_context() . В сочетании с оператором with он связывает тестовый запрос для взаимодействия с ним. Вот пример:

Другая возможность передать среду WSGI методу app.request_context() :

Доступ к данным запроса во Flask.

Здесь не будет рассматриваться подробно объект запроса flask.Request , а рассмотрим некоторые из наиболее распространенных операций. Прежде всего, необходимо импортировать его из модуля flask .

Для доступа к параметрам, представленным в URL-адресе как ?key=value , можно использовать атрибут request.args :

Полный список методов и атрибутов объекта запроса можно найти в документации по flask.Request .

Загрузка файлов на сервер.

Загруженные файлы хранятся в памяти или во временном каталоге файловой системы. Получить доступ к файлам, можно при помощи атрибута request.files объекта запроса. Каждый загруженный файл хранится в этом словаре. Он ведет себя так же, как стандартный файловый объект Python, но также имеет метод fp.save() , который позволяет сохранять файл в указанном месте файловой системе. Простой пример, как это работает:

Если необходимо знать, как изначально назывался файл, до того, как он был загружен, то можно получить доступ к атрибуту имени файла fp.filename . Имейте в виду, что это значение может быть подделано, следовательно доверять этому значению нельзя. Если необходимо использовать изначальное имя файла для его хранения на сервере, то лучше получить его через функцию werkzeug.utils.secure_filename() , которую предоставляет пакет Werkzeug :

Установка и получение файлов cookie во Flask.

Для доступа к файлам cookie можно использовать атрибут request.cookie . Чтобы установить файлы cookie , можно использовать метод response.set_cookie() объекта ответа. Атрибут cookie объектов запроса Request представляет собой словарь со всеми файлами cookie , передаваемыми клиентом. Если нужно использовать сессии/сеансы, то не используйте cookie напрямую, а вместо этого используйте встроенные сессии Sessions во Flask, которые повышают безопасность файлов cookie .

Чтение файлов cookie :

Установка файлов cookie :

Обратите внимание, что файлы cookie устанавливаются для объектов Responses. Поскольку вы обычно просто возвращаете строки из функций просмотра, Flask преобразует их для вас в объекты ответа. Если вы явно хотите сделать это, вы можете использовать функцию make_response (), а затем изменить ее.

Иногда вам может потребоваться установить cookie в точке, где объект ответа еще не существует. Это возможно с помощью шаблона обратных вызовов отложенного запроса.

Перенаправление/редиректы во Flask.

По умолчанию для каждого кода ошибки (в примере выше строка с abort(401) ) отображается стандартная страница ошибки. Если необходимо настроить собственную страницу с ошибкой, то можно использовать декоратор @app.errorhandler() :

Обратите внимание на 404 после вызова flask.render_template() . Это сообщает Flask, что код состояния этой страницы должен быть 404 (обязательно нужно указать). По умолчанию функция будет возвращать код 200, что означает: все прошло хорошо.

Ответ сервера во Flask.

Возвращаемое значение из функции представления, автоматически преобразуется в объект ответа сервера. Если возвращаемое значение является строкой, то оно преобразуется в объект ответа со строкой в ​​качестве тела ответа, кодом состояния 200 OK и mimetype text/html . Если возвращаемое значение - словарь dict , то для получения ответа вызывается flask.jsonify() . Логика, которую Flask применяет для преобразования возвращаемых значений в объекты ответа, выглядит следующим образом:

  • Если возвращается объект ответа правильного типа, то он возвращается непосредственно из функции представления.
  • Если это строка, то создается объект ответа с этими данными и параметрами по умолчанию.
  • Если это dict , то объект ответа создается с помощью flask.jsonify() .
  • Если возвращается кортеж, то элементы в кортеже предоставляют дополнительную информацию. Такие кортежи должны выглядеть следующим образом (response, status) , (response, headers) или (response, status, headers) . Значение кортежа status будет иметь приоритет над кодом статуса сервера, а заголовки headers могут быть списком или словарем дополнительных значений заголовков.

Если ничего из этого не сработает, то Flask будет считать, что возвращаемое значение является допустимым приложением WSGI, и преобразует его в объект ответа.

Если необходимо получить объект response внутри функции представления, то можно использовать функцию flask.make_response() .

Представьте, что есть такая функция-представление:

Для получения объекта response , нужно обернуть возвращаемое выражение с помощью flask.make_response() , далее можно его изменить, а затем вернуть его:

Создание API с JSON во Flask.

Распространенным форматом ответа при написании API является JSON. Начать писать такой API с помощью Flask несложно. Если возвращать словарь dict из функции-представления, то он будет преобразован в ответ JSON.

В зависимости от дизайна API можно создавать ответы JSON для типов, отличных от словаря dict . В этом случае используйте функцию flask.jsonify() , которая сериализует любой поддерживаемый тип данных JSON. Или используйте расширения сообщества Flask, которые поддерживают более сложные приложения.

Сессии/сеансы во Flask.

В дополнение к объекту flask.request существует также второй объект flask.session , называемый сеансом/сессией, который позволяет хранить информацию, которая будет передаваться от одного запроса к другому. Сессии реализованы поверх файлов cookie , при этом cookie криптографически подписываются. Это означает, что пользователь может просматривать содержимое файла cookie , но не зная секретного ключа изменить его не сможет.

Чтобы использовать сессии/сеансы, необходимо установить секретный ключ, при помощи которого будут подписываться сессионные cookie .

Как сгенерировать хорошие секретные ключи?

*Примечание о сеансах на основе файлов cookie :

Flask принимает значения, которые вводятся в объект сессии/сеанса, и преобразует их в файл cookie . Если вдруг обнаружите, что некоторые значения не сохраняются в запросах (четкой ошибки не будет), то необходимо проверить в настройках Вашего браузера, что файлы cookie действительно включены. Так же проверьте размер cookie в ответах страницы, он должен быть меньше размера, поддерживаемым веб-браузерами.

Помимо клиентских сеансов/сессий встроенных в Flask, есть несколько расширений, которые добавляют возможность обрабатывать сеансы на стороне сервера.

Ведение журнала во Flask.

Если специально не [настраивать ведение журнала][], то уровень журнала Python по умолчанию обычно warning .

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

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

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

Sportmaster Lab , Санкт-Петербург , От 170 000 до 250 000 ₽

Пример работы шаблонизатора Jinja2

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

Пример Hello World на Flask

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

Пример приложения на 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 начал обновляться и внедрять асинхронный режим работы. Синтаксис вы можете увидеть ниже:

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

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

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

Django

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

Flask


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

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

  • Популярность: использование и примеры внедрения.
  • Начало работы: документация и удобство навигации.
  • Гибкость для пользователя
  • Система маршрутизации.
  • Механизм создания шаблонов.
  • Наличие админки.
  • Скорость разработки.

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

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

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

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

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

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

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

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

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

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

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

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

Маршрутизация обрабатывается с помощью файла urls.py , который создается при запуске встроенной команды djangoadmin startproject . Для определения маршрута необходимо импортировать метод URL-адреса из Django и создать экземпляр соответствующего класса, указав каждый параметр (аргументы ключевого слова, существующий модуль URL-адресов и строку регулярного выражения). Встроенный URL-адрес для сайта администратора Django по умолчанию находится в файле urls.py . Он сообщает Django, откуда вы загружаете URL-адрес.

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

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

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:

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

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


В данной статье вы узнаете, как использовать Flask и React для создания full-stack приложений, которые легко масштабируются.

Мы рассмотрим следующие темы:

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

В этой архитектуре React обрабатывает пользовательский интерфейс (UI) и взаимодействует с Flask отдельно от бэкенда, используя безопасные запросы. Чтобы сделать эту статью более полезной, мы упомянем несколько проектов с открытым исходным кодом, доступных для скачивания с Github по лицензии MIT.

На заметку: Все ресурсы из данной статьи доступны для загрузки с Github. Админ-Панель на React настроена для работы с простым Flask API Server.

Обзор проекта, созданного с помощью Flask и React

Full-stack проекты могут быть структурированы с помощью различных способов и паттернов. Ниже будут представлены два наиболее популярных паттерна:

  • Пользовательский интерфейс (UI) и бэкэнд можно разрабатывать и тестировать как отдельные объекты;
  • Более простое развертывание, или деплоймент;
  • При необходимости пользовательский интерфейс (UI) может использовать тестовый API бэкенда (например если готовится новая версия).

Эта статья будет посвящена второму паттерну, двухуровневой архитектуре, где Flask API отделен от React UI.

Далее представлен примерный поток проекта:

  • Запускается сервер Flask и открывается API;
  • React UI загружается в браузер пользователя;
  • React инициирует вход в систему и получает учетные данные, предоставленные пользователем;
  • React отправляет учетные данные пользователя на API сервер;
  • Flask API проверяет учетные данные и генерирует JWT токен;
  • React UI сохраняет информацию о пользователе и его JWT токен;
  • Доступ к админке предоставляется до тех пор, пока пользователь не выйдет из системы.

Требования для Flask + React проекта

Для успешной сборки нашего full-stack проекта, несколько инструментов и библиотек должны быть уже установлены и доступны в терминале.

Что такое Flask?

Фреймворк Flask

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

Во время инсталляции также устанавливается базовый набор основных зависимостей которые нужны в Flask:

После завершения установки можно открыть редактор и написать небольшой код для нашего первого Flask приложения:

Что такое React?

В 2021 году статистика показывает, что React используется в качестве основной технологии при разработке фронтенда, вытесняя другие фреймворки, такие как Vue, Angular или Svelte. React активно поддерживается и развивается силами Facebook, а также широко используется крупными компаниями, многими разработчиками и open-source энтузиастами.

Библиотека UI React

React можно использовать в старых проектах через импорт из CDN или начать новый проект с помощью инструмента командной строки CRA (create-react-app). В нашем примере мы будем использовать шаблон с открытым исходным кодом, в котором код для аутентификации добавлен поверх существующего проекта, изначально созданного с помощью инструмента CRA. Для получения дополнительной информации о React, пожалуйста можете ознакомиться со следующими ресурсами:

Создание бэкенда для Flask API

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

Учитывая эти API требования, следует уточнить некоторые другие аспекты: тип базы данных, используемые библиотеки REST и JWT, и, конечно, структуру проекта. Чтобы облегчить процесс, мы выберем SQLite, но у нас будет возможность миграции на более сложные СУБД, такие как MySQL и PostgreSQL.

Зависимости Flask API

Мы будем использовать паттерн app factory, где функциональность API изолирована в отдельной папке и построена как Python пакет. Возможная структура проекта показана ниже:

Читайте также: