Django vs Flask | Сравнение и выбор

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

Установка

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

Мы попробуем настроить Django и Flask на компьютере с Linux и создадим приложение, чтобы увидеть, насколько прост (или сложен) процесс с каждым из них.

Настройка Джанго

В этом разделе мы настроим 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 о том, что текущий каталог следует рассматривать как пакет Python.
  • mysite/settings.py будет содержать свойства конфигурации для текущего проекта
  • mysite/urls.py — это файл Python, содержащий определения 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 полностью зависит от вас.

Заимствуя пример с домашней страницы 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, начать было очень легко. Приложение не требует сложной структуры каталогов, где вам нужно помнить, какой каталог/файл что делает. Вместо этого вы можете добавлять файлы и каталоги по мере необходимости. Это то, что представляет собой Flask как микро -фреймворк для веб-разработки.

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

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

Возможность трудоустройства

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

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

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

  • Pinterest
  • Instagram
  • Disqus
  • NASA

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

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

  • Twilio
  • Linkedin
  • Pinterest
  • Uber
  • Mailgun

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

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

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

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

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

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

Ограничения

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

Django

Итак, каковы аспекты 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 против 750 у Flask).

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

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