Что найти?

Сравнение Flask и Django в Python

/
/

В этой статье мы рассмотрим два самых популярных веб-фреймворка в Python: Django и Flask.

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

Один из самых простых способов сравнить два фреймворка – это установить их и обратить внимание на то, насколько легко пользователь может начать с ними работать, что мы и сделаем дальше. Мы попробуем настроить Django и Flask на машине с Linux и создадим приложение, чтобы увидеть, насколько легко (или сложно) выполнить этот процесс с каждым из них.

Настройка Django

В этом разделе мы настроим Django на машине под управлением Linux. Лучший способ начать работу с любой инфраструктурой Python – использовать виртуальные среды. Мы установим его с помощью pip.

$ sudo apt-get install python3-pip
$ pip3 install virtualenv
$ virtualenv --python=`which python3` ~/.virtualenvs/django_env

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

Когда мы закончим настройку нашей виртуальной среды, которую мы назвали django_env, мы должны активировать ее, чтобы начать ее использовать:

$ source ~/.virtualenvs/django_env/bin/activate

После активации мы, наконец, можем установить Django:

$ pip install Django

Предположим, наш проект называется mysite. Создайте новый каталог и войдите в него, выполните следующие команды:

$ mkdir mysite
$ cd mysite
$ django-admin startproject mysite

Если вы проверите получившийся проект, ваша структура каталогов будет выглядеть так:

mysite/
  manage.py 
  mysite/
    __init__.py 
    settings.py 
    urls.py 
    wsgi.py

Давайте посмотрим, что важно в каждом из созданных каталогов и файлов:

  • Корневой каталог mysite/ – это каталог контейнера для нашего проекта.
  • manage.py – это инструмент командной строки, который позволяет нам работать с проектом по-разному.
  • Каталог mysite/ – это пакет Python для кода нашего проекта.
  • mysite/__ init__.py – это файл, который сообщает, что текущий каталог следует рассматривать как пакет Python.
  • mysite/settings.py будет содержать свойства конфигурации для текущего проекта.
  • mysite/urls.py – это файл, содержащий определения URL-адресов для этого проекта.
  • mysite/wsgi.py действует как запись для веб-сервера WSGI, который перенаправляет запросы в ваш проект.

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

$ python manage.py runserver

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

September 20, 2017 - 15:50:53
Django version 1.11, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

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

Чтобы проверить свое приложение, перейдите по адресу http://localhost: 8000/, где вы должны увидеть страницу с надписью «Это сработало!».

Чтобы действительно создать какие-либо страницы или функции на вашем сайте, вам необходимо создать приложение в своем проекте. Но зачем вам приложение? В Django приложения – это веб-приложения, которые что-то делают, например блог, форум или систему комментариев. Проект представляет собой набор ваших приложений, а также конфигурацию приложений и всего веб-сайта.

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

$ cd mysite
$ python manage.py startapp myapp

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

manage.py
myapp/
  __init__.py
  admin.py
  apps.py
  migrations/
  models.py
  tests.py
  views.py
mysite/
  __init__.py 
  settings.py 
  urls.py 
  wsgi.py

Отсюда вам необходимо настроить представления в views.py и маршрутизацию URL-адресов в urls.py, которые мы сохраним для другого руководства.

Для запуска вашего проекта Django требуется несколько команд и немало файлов.

Настройка Flask

Как и Django, мы будем использовать виртуальную среду с Flask. Таким образом, команды для активации виртуальной среды останутся такими же, как и раньше. После этого вместо установки Django мы установим Flask.

$ pip install Flask

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

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

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

И запустить приложение так же просто, как его настроить:

$ FLASK_APP=hello.py flask run
 * Running on http://localhost:5000/

При посещении URL-адреса http://localhost: 5000/ должен отображаться текст «Hello World!» в вашем браузере.

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

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

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

Обучение

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

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

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

Возможности

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

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

Вот лишь несколько компаний, которые используют (или использовали) Django для своих сайтов:

  • Pinterest;
  • Instagram;
  • Disqus;
  • НАСА.

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

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

  • Twilio;
  • Linkedin;
  • Pinterest;
  • Uber;
  • Mailgun;

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

Размер и масштаб проекта

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

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

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

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

Ограничения

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

Джанго

Итак, какие аспекты Django работают против него, чтобы быть выбранным вами фреймворком?

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

Django – это довольно большая среда для развертывания для простых случаев использования, поскольку она скрывает от вас большую часть контроля. Если вы хотите использовать что-то, что не является «стандартным» в Django, вам придется приложить дополнительные усилия для этого.

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

Flask

Теперь, когда мы увидели некоторые проблемы с Django, давайте не будем забывать о Flask. Поскольку фреймворк Flask настолько мал, что не на что жаловаться. Ну, если не считать того факта, что он такой маленький.

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

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

Что выбрать Flask или Django?

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

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

Если вы уделяете много внимания поддержке сообщества, то Django, вероятно, лучше в этом отношении, учитывая его историю. Он существует с 2005 года, тогда как Flask был создан в 2010 году. На момент написания этой статьи у Django было примерно в 3,5 раза больше вопросов и ответов по Stack Overflow, чем у Flask (около 2600 вопросов Django к Flask 750).

Фреймворк Flask относительно легкий. Фактически, он почти в 2,5 раза меньше Django по объему кода. Это большая разница, особенно если вам нужно понять внутреннюю работу вашего веб-фреймворка. В этом аспекте Flask будет намного легче читать и понимать для большинства разработчиков.

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

Заключение

В этой статье мы сравнили два веб-фреймворка, Django и Flask, изучив их различные свойства и настроив простое «Hello World!» приложение с каждым.

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

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

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

Оставить комментарий

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

This div height required for enabling the sticky sidebar