Рубрики
Без рубрики

Колба против Джанго: Почему Колба Может Быть Лучше

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

Автор оригинала: Gareth Dwyer.

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

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

Подождите, зачем мне нужен веб-фреймворк и что это вообще такое. Быстрое сравнение Привет, Мир! Заключительные Замечания

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

Когда вы впервые начали разрабатывать приложения на Python, вы, вероятно, разрабатывали так называемые “приложения командной строки”. Пользователь должен запустить эти сценарии в командной строке или командной строке и передать ввод в качестве аргументов или через стандартный ввод. Несколько лет назад естественным шагом от создания такого рода приложений было создание настольных приложений — программы, которая позволяет пользователям взаимодействовать с помощью мыши и клавиатуры, которая содержит меню и другие интерактивные элементы. В наши дни более распространен переход к созданию веб — приложений-ваши пользователи будут взаимодействовать с вашей программой через свой веб-браузер. Для хорошего обзора того, почему веб-приложения, возможно, лучше, чем настольные приложения, см. Сообщение Патрика “patio11” Маккензи здесь: http://www.kalzumeus.com/2009/09/05/desktop-aps-versus-web-apps/.

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

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

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

Теперь мы обсудим их различия более подробно.

Быстрое сравнение

Если вы здесь для быстрых ответов, этот раздел для вас!

  • Основные контрасты:
    • Колба обеспечивает простоту , гибкость и мелкозернистый контроль . Это unopinionated (это позволяет вам решить, как вы хотите реализовать вещи).
    • Django предоставляет все включено опыт: вы получаете панель администратора , интерфейсы баз данных , ORM и структуру каталогов для ваших приложений и проектов из коробки.
  • Вероятно, вам следует выбрать:
    • Flask, если вы сосредоточены на опыте и возможностях обучения или хотите больше контролировать, какие компоненты использовать (например, какие базы данных вы хотите использовать и как вы хотите взаимодействовать с ними).
    • Джанго, если вы сосредоточены на конечном продукте. Особенно если вы работаете над простым приложением, таким как новостной сайт, интернет-магазин или блог, и вы хотите, чтобы всегда был один очевидный способ делать вещи.
  • Дополнительная информация:
    • Django существует дольше — он был впервые выпущен в 2005 году, в то время как Flask дебютировал в 2010 году — и более популярен — в январе 2017 года было 2631 вопрос о StackOverflow о Django и 575 для Flask. Обе платформы неуклонно набирают популярность, о чем свидетельствует количество вопросов StackOverflow о каждой из них на рисунке ниже.
    • Колба имеет гораздо более легкий след, содержащий менее 10000 строк исходного кода по сравнению с примерно 240000 строками Django.

Привет, Мир!

Первое, что обычно делают люди, изучая новую технологию, – это следуют простейшему набору шагов, которые приводят к выводу “Привет, мир!” Ниже мы рассмотрим шаги по созданию приложений “Hello World” с помощью Flask и Django.

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

Колба

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

pip3 установить колбу –пользователь

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

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
  return "Hello, World!"
  
if __name__ == "__main__":
  app.run()

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

  • Строка 1 импорт Колбы
  • Строка 3 инициализирует переменную app , используя атрибут __name__ |/ Строка 5
  • – это место, где происходит магия колбы. @app.route является декоратором Python . Он берет функцию непосредственно под ней и изменяет ее. В этом случае мы используем это для маршрутизации трафика с определенного URL-адреса на функцию, расположенную непосредственно ниже. Используя различные вызовы @app.route , мы можем "запускать" разные части кода, когда пользователь посещает разные части нашего приложения. В этом случае у нас есть только один маршрут / , который по умолчанию является "корнем" нашего приложения. В
  • Строке 6 имя функции hello не имеет значения. Вместо того, чтобы вызывать эту функцию из другого места в вашем коде, она будет вызываться автоматически. Тем не менее, это все еще хорошая практика, чтобы дать ему соответствующее название. Строка 7
  • возвращает строку нашему пользователю. Обычно мы визуализируем шаблон или возвращаем HTML здесь, чтобы пользователи видели красиво отформатированную страницу, но возврат строки Python также отлично работает. Строка 9
  • является обычным шаблоном Python, чтобы убедиться, что мы ничего не запускаем автоматически, если наш код импортируется другим скриптом Python. В строке 10
  • вызывается метод run() приложения , инициализированного в строке 3. Это запускает сервер разработки для Flask и позволяет нам посетить наше веб-приложение с нашей локальной машины, посетив localhost .

Теперь вы можете выполнить команду python3 flaskhello.py и вы должны увидеть вывод, похожий на:

>>> Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

В приведенном выше сообщении “5000” — это номер порта, на котором работает наше приложение (ваше может отличаться, например, “5003”), а “127.0.0.1” означает, что приложение работает на локальном хосте-оно доступно только на нашей машине разработки. Если вы откроете веб-браузер и посетите http://127.0.0.1:5000/(при необходимости подставив номер порта), вы увидите веб-страницу, которая возвращает приветствие “Привет, мир!”.

Джанго

Django также можно установить через pip . Выполните следующую команду:

pip3 установить django –user

После его установки нам нужно запустить несколько сценариев Django для создания проекта, чтобы создать приложение. Когда вы установили Django, он также настроил команду django-admin , которую мы будем использовать сейчас. Выполните следующие действия:

django-admin startproject hellodjango

Это создаст новый “проект” Django и создаст каталог hello django в том месте, где вы выполнили команду. Если вы посмотрите в каталог hellodjango , вы увидите, что он создал manage.py файл и подкаталог, который также называется hellodjango . Внутри подкаталога есть три скрипта Python. Нам нужно будет только беспокоиться о urls.py для нашего проекта “Привет, мир”.

Следующий шаг-использовать Django для создания приложения, которое представляет собой организационную структуру ниже структуры проекта Django (один проект может содержать много приложений). Мы будем использовать manage.py файл, созданный предыдущей командой для создания приложения. Из внешнего каталога hellodjango выполните следующую команду:

python3 manage.py startapp helloworld

Это создает приложение helloworld и делает его частью нашего проекта hello django . Теперь нам нужно настроить маршрутизацию URL-адресов (как мы делали с @app.route в Flask). Поскольку проекты Django имеют большую структуру по умолчанию, чем приложения Flask, у нас будет несколько дополнительных шагов. Предыдущая команда создала каталог helloworld во внешнем каталоге hellodjango . Откройте автоматически созданный helloworld/views.py файл и добавьте следующий код:

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, World!")
  • Строка 1 импортирует функцию Http Response , которую мы можем использовать для отправки строки по HTTP пользователю нашего веб-приложения. Как и в случае с Flask, мы обычно не используем это, так как мы хотели бы делать более сложные вещи с рендерингом HTML-шаблонов. Однако для нашего приложения Hello World это все, что нам нужно.
  • В строке 3 мы определяем функцию индекса. Здесь, в отличие от Flask, мы не используем декоратор, который говорит, что эта функция должна вызываться, когда пользователь посещает наше приложение. Вместо этого мы установим это с помощью двух urls.py файлы — один для проекта, который был создан автоматически, и один для приложения, которое нам нужно будет создать.
  • Строка 4 возвращает строку “Привет, мир!”, завернутую в ответ Http, чтобы ее можно было отобразить в веб-браузере пользователя.

Теперь нам нужно создать urls.py файл для вашего приложения. Создать helloworld/urls.py и добавьте следующий код:

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]
  • Строка 1 импортирует функцию url , чтобы мы могли связать определенные URL-адреса с функциями в нашем views.py файл.
  • Строка 3 импортирует views.py файл, в который мы добавили наше представление “Привет, мир” index () .
  • Строки 5-7 устанавливает список url-шаблонов — это эквивалентно @app.route декораторам, которые мы использовали в Flask. Мы сопоставляем определенные URL-адреса с помощью регулярных выражений и связываем их с функциями в нашем views.py сценарий. В этом случае мы настраиваем один шаблон, который соответствует пустому URL — адресу (например, “/” в Flask-другими словами, странице по умолчанию нашего приложения) и связывает его с функцией views.index , которую мы писали ранее.

Это конфигурация URL-адреса для нашего приложения ( hello world ). Нам также нужна конфигурация URL-адреса для нашего проекта ( hello django ). Отредактируйте hellodjango/hellodjango/urls.py файл, который был создан автоматически (может быть немного запутанным, что есть два urls.py файлы, но это должно иметь смысл, если вы думаете, что один из них принадлежит всему проекту, маршрутизируя URL-адреса в разные приложения, а другой принадлежит только приложению helloworld ). Добавьте следующий код:

from django.conf.urls import include, url 
 
urlpatterns = [ 
    url(r'^hello/', include('helloworld.urls')), 
]

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

Теперь вернитесь во внешний каталог /hellodjango (тот, который содержит manage.py файл) и выполните следующую команду:

python3 manage.py runserver

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

Performing system checks...

System check identified no issues (0 silenced).

You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

February 03, 2017 - 16:14:20
Django version 1.10.5, using settings 'hellodjango.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Вы можете игнорировать предупреждение о миграции — это связано с базой данных для веб-приложения, которую мы не используем. Важной строкой является строка 10, которая, как и Flask, сообщает вам, на каком порту работает сервер. В приведенном выше примере это 8000, поэтому мы можем посетить http://127.0.0.1:8000/hello чтобы просмотреть наше приветствие “Привет, мир!” (не забудьте /привет в конце, которое говорит Джанго, какое приложение посетить).

Заключительные Замечания

В этом посте я представил введение в Flask и Django, а затем кратко сравнил их, а затем показал, как создать приложение “Hello World” с использованием каждой платформы.

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

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

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