No Image

Flask python для начинающих

СОДЕРЖАНИЕ
0 просмотров
11 марта 2020

Flask и Django – два самых популярных веб-фреймворка для Python (конечно, существуют и другие). В этой статье я рассмотрю аспекты, на которые вам стоит обратить внимание, выбирая между Flask и Django. Мы также рассмотрим приложение «Hello, World» в каждом из них, чтобы лучше разобраться в том, как они работают. Учтите, что я пользуюсь Flask на протяжении длительного периода времени, и всегда склоняюсь к нему, но в данной статье я буду максимально объективным.

Погодите, зачем мне веб-фреймворк и что это вообще такое?

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

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

  • Flask реализуется с минимальными надстройками, которые всецело предоставлены аддонам или разработчику;
  • Django следует философии «все включено», и дает вам большой ассортимент для работы.

Мы рассмотрим разницу между ними более детально.

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

Если вы читаете эту статью для краткого описания, тогда этот раздел для вас!

Ключевые различия:

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

Выбирайте на основании следующего:

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

Больше информации:

Django существует дольше – первое издание было в 2005 году, в то время как Flask появился в 2010. Django также является более популярным – в январе 2017 в StackOverflow насчитывалось 2631 вопросов о Django, и лишь 575 о Flask. Оба фреймворка набирают популярность, если мы берем StackOverflow в качестве мерила.

Hello, World!

Первое, что люди всегда делают, когда они изучают новую технологию, это следуют самому простому набору шагов, чтобы получить выдачу «Hello, World!«. Ниже, мы тоже последуем этому примеру и построим приложения «Hello World» в Flask и Django. Обратите внимание на то, что Flask, главными чертами которого являются минимализм и простота, позволяет нам запустить «Hello World» намного быстрее, но это не говорит о том, что Flask лучше по всем параметрам. Возможно, это займет меньше времени и усилий для создания более тонкого веб приложения (вроде такого, которое обрабатывает и проверяет вводимые пользователем данные и сохраняет их в базу данных) если сделать это в Django, а не в Flask. В любом случае, рассмотрев оба проекта Hello World, мы получим более широкое представление об этих двух фреймворках. Также мы лучше познакомимся с тем, как это происходит изнутри.

Flask

Первое, что нам нужно сделать в нашем списке работы с Flask, это установить Flask. Это делается легко при помощи pip. В зависимости от того, как ваш pip установлен, и в какой версии Python вы работаете, вам может не понадобится использовать 3 или флаг —user в следующей команде:

После этого, создайте файл Python, под названием flaskhello.py, и введите следующий код:

Давайте разберемся с тем, что делает этот код:

  • Первая строка импортирует Flask
  • Третья строка инициализирует переменную приложения, используя атрибут __name__
  • Пятая строка содержит в себе чудеса Flask. @app.route – это декоратор Python. Он берет функцию снизу и модифицирует её. В данном случае, мы используем его для маршрутизации трафика из определенного URL в расположенной ниже функции. Используя различные вызовы @app.route, мы можем «спровоцировать» различные части кода, когда пользователь посещает разные части нашего приложения. В данном случае, у нас только один маршрутизатор «/», который является корнем по умолчанию в нашем приложении.
  • В шестой строке, функция под названием hello не так уж важна. Вместо вызова этой функции из той или иной части нашего кода, она будет вызвана автоматически. Это хорошая практика для того, чтобы дать ей релевантное название.
  • Седьмая стока возвращает строку нашему пользователю. Обычно мы рендерим шаблон или обрабатываем HTML, чтобы пользователь могу видеть аккуратно оформленную страницу, но и возврат строк Python также хорошо работает.
  • Девятая строка – это обычный шаблон Python, используемый для того, чтобы убедиться в том, что мы не запускаем ничего в автоматическом режиме, если наш код был импортирован из другого скрипта Python.
  • В десятой строке вызывается метод run() приложения, которое мы инициализировали в третьей строке. Это запускает сервер разработки для Flask и дает нам возможность посетить наше веб приложение с нашей локальной машины путем посещения localhost.

Хотите совершить недорогую покупку подписчиков в Одноклассниках? Мы знаем, где это сделать — на сервисе doctorsmm. Здесь Вам предложат персональные условия для приобретения ресурса с возможностью выбора оптимальной скорости и качества аккаунтов. Успейте совершить заказ, пока на сайте действуют оптовые скидки.

Flask поможет вам ускорить разработку Python в ваших проектах.

Читайте также:  Читеры в rainbow six siege

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

  1. Легко устанавливается
  2. Поддерживается активным сообществом
  3. Хорошая документация
  4. Он очень прост и минималистичен, и не включает в себя ничего лишнего
  5. В то же время Flask достаточно гибкий, вы можете добавлять расширения, если вам нужно больше функциональности

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

  1. Установка Flask
  2. Рекомендуемая структура файлов и директорий для Flask проекта
  3. Конфигурация и инициализация Flask приложения
  4. Создание представлений и шаблонов

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

Установка

Нам понадобится следующее для данного урока:

Возможно, у вас уже установлен Python. Вы можете проверить, запустив команду python в терминале. Если он установлен, вы увидите следующее:

Если он у вас еще не установлен, то скачать его можете здесь.

Мы начнем с установки виртуального окружения (virtualenv), это инструмент для создания изолированных окружений Python. Мы должны использовать виртуальные среды для поддержания зависимостей, используемых различными Python проектами, отдельными и, для сохранения нашей глобальной директории пакетов. Мы продвинемся сейчас на шаг вперед и установим virtualenvwrapper — это набор расширений, которые облегчают использование виртуального окружения, предоставляя простые команды.

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

Теперь у нас есть виртуальное окружение, которое называется my-ven, которое мы активировали и уже работает. Теперь любая зависимость, которую мы установим будет установлена здесь, а не глобально. Не забывайте активировать виртуальное окружение, всякий раз когда вы хотите использовать или работать над этим проектом!

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

Наконец, давайте установим Flask:

Во время установки Flask также установится несколько других зависимостей, которые вы увидите, когда выполните следующую команду:

Для чего все эти пакеты?

Flask использует Click (Command Line Interface Creation Kit) для интерфейса командной строки, который позволит вам добавить пользовательские команды оболочки для приложения.

ItsDangerous обеспечивает безопасность при передаче данных с помощью криптографического подписания.

Jinja2 — это мощный шаблонизатор для Python, в то время как MarkupSafe — библиотека для обработки HTML строк.

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

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

Скажи «Hello World!» с помощью Flask

Я думаю, что любой урок для начинающего программиста не может не начаться с классического «Hello World!». Так вот как это сделать в Flask:

Создайте следующий файл hello_world.py в вашем любимом текстовом редакторе (у меня Atom, вот кстати к нему полезные плагины):

Мы начинаем с импортирования класса Flask и создания его экземпляра. Мы используем аргумент __name__, чтобы указать модуль или пакет приложения, так что Flask знает, где искать другие файлы, такие как шаблоны. Затем у нас есть простая функция, которая будет отображать строку Hello World!. Последний декоратор просто говорит Flask, какой путь отобразит результат функции.В данном случае, мы указали путь /, который является домашним URL-адресом .

Читайте также:  Антивирус андроид 4 pda

Давайте посмотрим это в действии. В вашем терминале выполним следующее:

Первая команда говорит системе какие приложения нужно запустить. Следующая запускает сервер. Введите указанный URL-адрес ( http://127.0.0.1:5000/ ) в браузере. Вуаля! Это работает!

Структура каталогов

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

  1. /app: Это каталог в my-project. Тут весь наш код, и другие файлы, такие как requirements.txt снаружи.
  2. /app/templates: Здесь наши HTML-файлы.
  3. /app/static: Здесь статические файлы — CSS и JavaScript, а также изображения. Тем не менее, нам не нужна эта папка для этого урока, так как мы не будем использовать никаких статических файлов.

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

hello_world.py кажется немного неуместным сейчас, не так ли? Не волнуйтесь, мы исправим это в следующем разделе.

Структура файла

Для примера «Hello World!» у нас был только один файл. Чтобы создать наш сайт нам понадобится несколько файлов, которые будут выполнять различные функции. Большинство Flask приложений имеют следующую основную структуру файлов:

Hello World во фреймворке Flask

Начать знакомство с Flask можно с создания простого приложения, которое выводит “Hello World”. Создаем новый файл main.py и вводим следующий код.

Это приложение “Hello World”, созданное с помощью фреймворка Flask. Если код в main.py не понятен, это нормально. В следующих разделах все будет разбираться подробно. Чтобы запустить main.py , нужно ввести следующую команду в виртуальную среду Python.

Запуск файла main.py запускает локальный сервер для разработки на порте 5000. Осталось открыть любимый браузер и зайти на http://127.0.0.1:5000/ , чтобы увидеть приложение Hello World в действии.

Остановить сервер можно с помощью комбинации CTRL+C.

Создание приложения Flask

У каждого Flask-приложения должен быть экземпляр класса. Экземпляр — это WSGI-приложение (WSGI – это интерфейс для взаимодействия сервера с фреймворком), которое показывает, что сервер передает все полученные запросы экземпляру для дальнейшей обработки. Объект класса Flask создается следующим образом:

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

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

Создание route (путей)

Маршрут (или путь) используется во фреймворке Flask для привязки URL к функции представления. Эта функция отвечает на запрос. Во Flask декоратор route используется, чтобы связать URL адрес с функций. Вот как маршрут создается.

Этот код назначает функцию index() обработчиком корневого URL в приложении. Другими словами, каждый раз, когда приложение будет получать запрос, где путь — / , вызывается функция index() , и на этом запрос завершается.

Как вариант можно использовать метод add_url_rule() вместо декоратора route для маршрутизации. add_url_rule() — это простой метод, а не декоратор. Помимо URL он принимает конечную точку и название функции представления. Конечная точка относится к уникальному имени маршрута. Обычно, название функции представления — это и есть конечная точка. Flask может генерировать URL из конечной точки, но об этом позже. Предыдущий код аналогичен следующему:

Тест на знание python

Декоратор route используется в большинстве случаев, но у add_url_rule() есть свои преимущества.

Функция представления должна вернуть строку. Если пытаться вернуть что-то другое, сервер ответит ошибкой 500 Internal Sever Error.

Можно создать столько столько, сколько нужно приложению. Например, в следующем списке 3 пути.

Когда URL в маршруте заканчивается завершающим слешем ( / ), Flask перенаправляет запрос без слеша на URL со слешем. Так, запрос к /career будет перенаправлен на /career/ .

Для одной функции представления может быть использовано несколько URL. Например:

В этом случае в ответ на запросы /contact/ или /feedback/ , будет вызвана функция feedback() .

Если перейти по адресу, для которого нет соответствующей функции представления, появится ошибка 404 Not Found.

Эти маршруты статичны. Большая часть современных приложений имеют динамичные URL. Динамичный URL – это адрес, который состоит из одной или нескольких изменяемых частей, влияющих на вывод страницы. Например, при создании веб-приложения со страницами профилей, у каждого пользователя будет уникальный id. Профиль первого пользователя будет на странице /user/1 , второго — на /user/2 и так далее. Очень неудобный способ добиться такого результата — создавать маршруты для каждого пользователя отдельно.

Вместе этого можно отметить динамические части URL как (переменные). Эти части потом будут передавать ключевые слова функции отображения. Следующий код демонстрирует путь с динамическим элементом.

Читайте также:  Как обновить wot blitz на windows 10

В этом примере на месте будет указываться часть URI, которая идет после /user/ . Например, если зайти на /user/100/ , ответ будет следующим.

Этот элемент не ограничен числовыми id. Адрес может быть /user/cowboy/ , /user/foobar10/ , /user/@@##/ и так далее. Но он не будет работать со следующими URI: /user/ , /user/12/post/ . Можно ограничить маршрут, чтобы он работал только с числовыми id после /user/ . Это делается с помощью конвертера.

По умолчанию динамические части URL передаются в функцию в виде строк. Это можно изменить с помощью конвертера, который указывается перед динамическими элементами URL с помощью . Например, /user/ / будет работать с адресами /user/1/ , /user/200/ и другими. Но /user/cowboy/ , /user/foobar10/ и /user/@@##/ не подойдут.

В этом списке все конвертеры, доступные во Flask:

Конвертер Описание
string принимает любые строки (значение по умолчанию).
int принимает целые числа.
float принимает числа с плавающей точкой.
path принимает полный путь включая слеши и завершающий слеш.
uuid принимает строки uuid (символьные id).

Запуск сервера

Для запуска сервера разработки нужно использовать метод run() объекта Flask .

Условие __name__ == "__main__" гарантирует, что метод run() будет вызван только в том случае, если main.py будет запущен, как основная программа. Если попытаться использовать метод run() при импорте main.py в другой модуль Python, он не вызовется.

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

Теперь должно быть понятнее, как работает main.py .

Режим отладки (Debug)

Баги неизбежны в программировании. Поэтому так важно знать, как находить ошибки в программе и исправлять их. Во Flask есть мощный интерактивный отладчик, который по умолчанию отключен. Когда он выключен, а в программе обнаруживается ошибка, функция показывает 500 Internal Sever Error. Чтобы увидеть это поведение наглядно, можно специально добавить баг в файл main.py .

В этом случае программа пытается вывести значение неопределенной переменной i, что приводит к ошибке. Если открыть http://127.0.0.1:5000/ , то появится ошибка 500 Internal Sever Error:

Тем не менее сам браузер не сообщает о типе ошибки. Если посмотреть в консоль, то можно увидеть отчет об ошибке. В данном случае он выглядит вот так:

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

Чтобы включить режим, нужно передать аргумент debug=True методу run() :

Еще один способ — указать значение True для атрибута debug .

После обновления файл main.py следующим образом его можно запускать.

Теперь при открытии http://127.0.0.1:5000/ на странице будет отладчик.

Теперь, когда отладчик включен, вместо ошибки 500 Internal Server на странице будет отображаться отчет об ошибке. Он в полной мере описывает, какая ошибка случилась. Внизу страницы видно, что оператор print пытался вывести значение неопределенной переменной i . Там же указан тип ошибки, NameError , что подтверждает то, что ошибка заключается в том, что имя i не определено.

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

При наведении на строчку кода отображается иконка терминала. Нажав на нее, откроется консоль, где можно ввести любой код Python.

В ней можно проверить локальные переменные.

Если консоль открывается первый раз, то нужно ввести PIN-код.

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

Завершить урок стоит созданием еще одного приложения Flask с применением всех имеющихся знаний.

Создаем еще один файл main2.py со следующим кодом:

Если запустить файл и зайти на http://127.0.0.1:5000/ , браузер поприветствует выражением «Hello Flask»:

В этой новой версии приложения есть два динамических пути. Если в браузере ввести http://127.0.0.1:5000/user/123/ , откроется страница со следующим содержанием:

Стоит заметить, что путь /user/ / будет работать только с теми URL, где динамическая часть ( user_id ) представлена числом.

Чтобы проверить второй динамический путь, нужно открыть http://127.0.0.1:5000/books/sci-fi/ . В этот раз получится следующее:

Если сейчас попробовать открыть URL, который не определен в путях, выйдет ошибка 404 Not Found. Например, такой ответ получите при попытке перейти на http://127.0.0.1:5000/products .

Как Flask обрабатывает запрос?

Откуда Flask знает, какую функцию выводить, когда он получает запрос от клиента?

Flask сопоставляет URL и функции отображения, которые будут выводиться. Определение соответствий (маршрутизация) создается с помощью декоратора route или метода add_url_rule() в экземпляре Flask. Получить доступ к этим соответствиям можно с помощью атрибута url_map у экземпляра Flask .

Как видно, есть 4 правила. Flask определяет соответствия URL в следующем формате:

Путь /static/ автоматически добавляется для статических файлов Flask. О работе со статическими файлами речь пойдет в отдельном уроке «Обслуживание статических файлов во Flask».

Комментировать
0 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector