- Что такое Django и зачем это нужно
- Что такое Django
- Встроенная панель управления
- Как работает Django
- Плюсы фреймворка
- Когда лучше без Django
- Что написано на Django
- С чего начать
- Плюсы и минусы Django
- Плюсы Джанго
- Принцип «Всё включено» («Batteries included»)
- Стандартизированная структура
- Приложения Django
- Безопасный по умолчанию
- REST Framework для создания API
- GraphQL фреймворк для создания API
- Недостатки Джанго
- Django ORM
- Django развивается медленно
- В итоге: должен ли я выбрать Django?
Что такое Django и зачем это нужно
Это статья об очень популярном фреймворке, на котором сейчас делают множество веб-сервисов, приложений и систем. Статья будет полезна тем, кто немного разбирается в вебе и хочет погрузиться глубже.
Для начала основные понятия. Если термины знакомы, пропускайте.
Веб-сервис или веб-приложение — это программа, которая делает что-то полезное через ваш браузер. Поиск Яндекса — это веб-сервис. Какой-нибудь онлайн-словарь или переводчик — тоже веб-сервис.
Веб-сервис отличается от обычной программы тем, что все вычисления происходят на сервере, а результат вычислений возвращается пользователям в виде веб-страницы. Когда вы задаёте вопрос Яндексу, этот вопрос улетает в огромный яндексовый дата-центр, там на основе огромного количества данных готовится ответ, и он прилетает вам в виде компактной простой странички.
Веб-сервисы используют какие-то внутренние языки: на серверах, которые обрабатывают ваши запросы, работают программы, которые обеспечивают все нужные вычисления. Эти программы написаны на каких-то языках. Некоторые языки лучше приспособлены для задач веб-приложений, другие похуже.
Один из популярных языков веб-приложений — PHP. Его недолюбливают, но на нём сделана существенная часть веб-сервисов. Прочитайте о PHP в нашей статье.
Другой язык, набравший популярность в конце 2010-х — Python.
Фреймворк — это надстройка над языком программирования, которая упрощает разработку. Внутри фреймворка собрано много готовых конструкций, которые программисту не нужно делать самому — вместо этого он использует команды фреймворка и сразу получает результат. Можно представить, что фреймворк — это набор полуфабрикатов, из которых можно приготовить блюдо.
Что такое Django
Django — это фреймворк для быстрой разработки сайтов и приложений на Python. Это значит, что с ним можно будет собрать готовый сайт или веб-приложение быстрее, проще и аккуратнее, чем писать весь код самому с нуля. Для этого разработчику сразу доступно такое:
- встроенный веб-сервер, чтобы не ставить его отдельно;
- механизмы авторизации пользователей;
- подключение и работа с базами данных;
- шаблоны страниц и простых веб-интерфейсов;
- простые способы выводить, наполнять, шаблонизировать и автоматизировать отдачу веб-страниц;
- встроенная система кеширования, чтобы снизить нагрузку на сайт;
- мультиязычность, когда на сайте есть переключатель языков.
Можно представить, что Django — это библиотека элементов, с помощью которых можно довольно быстро собрать работающее веб-приложение со сложной логикой. Тут авторизация, там вывод страниц, тут администраторская панель, тут запросы в базу данных — всё это соединяете, и за короткое время у вас всё работает.
Встроенная панель управления
Большой плюс Django в том, что в него встроена своя панель управления сайтом. Это значит, что разработчику не нужно писать свою админку — она уже доступна сразу после запуска сайта.
В панели управления сайтом можно:
- настраивать структуру сайта;
- управлять пользователями;
- работать с фильтрами и выгрузить все необходимые данные;
- поправить код и сразу увидеть изменения на сайте;
- работать с базой данных сайта;
- смотреть статистику.
Так как админка тоже написана на Python, то её можно тоже оптимизировать или переделать под задачи проекта. В этом сила Django — зная Python, вы можете настроить что угодно и как угодно.
Как работает Django
Работа Django основана на модели MVT — Model-View-Template, что переводится на русский как «Модель — Представление — Шаблон». Смысл этой модели в том, чтобы разделить логику работы сайта, внешний вид страниц и реакции на действия пользователей.
Модель отвечает за логику работы, методы, свойства объектов и то, как они взаимодействуют между собой. Например, как обращаться к базе данных, куда отправлять результаты и в каком формате это хранить.
Представление занимается тем, что подготавливает данные, которые должен увидеть пользователь, и отправляет их в нужные места, например в шаблоны. Ещё задача представления — принимать запросы от пользователя и как-то на них реагировать, например что-то делать после нажатия разных кнопок на сайте.
Шаблон — это каркас HTML-страницы, который потом можно наполнить разным контентом. В шаблонах обычно прописывают типовые страницы, экраны и элементы, с которыми работает пользователь. Например, вот пример шаблона, который выведет все лучшие спортивные команды сезона (которые возьмёт из массива best_teams ):
Плюсы фреймворка
Скорость разработки. Django с самого начала создавался как фреймворк для быстрой сборки. За пару дней реально собрать на нём рабочую версию сайта, протестировать её и сразу понять, что делать дальше.
Масштабирование. В Django почти всё основано на модулях. Если нужно расширить сайт или масштабироваться под посещение миллиона человек в день, то можно просто одни модули заменить другими. Другие модули при этом даже не заметят, что на сайте что-то поменялось.
Безопасность. В Django встроено много готовых решений для безопасной работы: система аутентификации, защита от инъекций кода, межсайтовых запросов, подмены заголовка хоста и от других потенциальных уязвимостей.
Библиотеки и расширения. Если чего-то нет в Django — это можно поставить отдельной библиотекой: новую админку, плагин для работы с биометрическими данными или валидатор полей в формах.
Когда лучше без Django
Django хорош, когда вам нужно собрать большой сайт со множеством возможностей. Если же вы хотите просто вести блог или сделать себе сайт с портфолио, лучше выбрать что попроще: установить Вордпресс или собрать всё на Бутстрапе.
Что написано на Django
Сейчас на Django работает много популярных проектов, например:
- YouTube;
- Google (для вывода результатов по шаблону);
- Dropbox;
- Quora;
- Mozilla;
- Spotify;
- Reddit.
Django можно использовать везде, где есть большая база данных и много пользователей.
С чего начать
Если любите изучать всё в первоисточнике — сходите на официальный сайт Django.
Если нужна вся документация на русском — почитайте django.fun или на сайте разработчиков Mozilla.
Если хотите попробовать Django в деле без установки на свой компьютер — используйте онлайн-версию.
Плюсы и минусы Django
Прим. перев.: Эта статья рассчитана в основном на тех кто только выбирает фреймворк для веб-разработки. Опытные разработчики на Django вряд ли узнают что-то новое.
Django описывают как «веб-фреймворк для перфекционистов с дедлайнами». Его создали, чтобы переходить от прототипов к готовым сервисам как можно быстрее.
Фреймворк поможет разработать CRUD приложение под ключ. С Django не придется изобретать велосипед. Он работает из коробки и позволит сосредоточиться на бизнес-логике и продуктах для обычных людей.
Плюсы Джанго
Принцип «Всё включено» («Batteries included»)
Фраза «всё включено» означает, что большинство инструментов для создания приложения — часть фреймворка, а не поставляются в виде отдельных библиотек.
Django содержит огромное количество функциональности для решения большинства задач веб-разработки. Вот некоторые из высокоуровневых возможностей Django, которые вам придётся искать отдельно, если вы предпочтёте микро-фреймворк:
- ORM
- Миграции базы данных
- Аутентификация пользователя
- Панель администратора
- Формы
Стандартизированная структура
Django как фреймворк задаёт структуру проекта. Она помогает разработчикам понимать, где и как добавлять новую функциональность.
Благодаря одинаковой для всех проектов структуре гораздо проще найти уже готовые решения или получить помощь от сообщества. Огромное количество увлеченных разработчиков поможет справиться с любой задачей гораздо быстрее.
Приложения Django
Приложения в Django позволяют разделить проект на несколько частей. Приложения устанавливаются путём добавления в settings.INSTALLED_APPS. Этот подход позволяет легко интегрировать готовые решения.
Сотни универсальных модулей и приложений очень сильно ускорят разработку. Взгляните на их список на сайте djangopackages.org.
Безопасный по умолчанию
Django безопасен из коробки и включает механизмы предотвращения распространенных атак вроде SQL-инъекций (XSS) и подделки межсайтовых запросов (CSRF). Подробнее об этом можно почитать в официальном руководстве по безопасности.
REST Framework для создания API
Django REST Framework, который часто сокращают до «DRF», является библиотекой для построения API. Он имеет модульную и настраиваемую архитектуру, которая хорошо работает для создания как простых, так и сложных API.
В DRF политики аутентификации и разрешений доступны из коробки. Он поставляется с базовыми классами для CRUD операций и встроенной утилитой для тестирования разрабатываемого API.
GraphQL фреймворк для создания API
Большие REST API часто требуют большого количества запросов для получения всех необходимых данных. GraphQL — это язык запросов, который позволяет обмениваться связанными данными гораздо проще. Подробнее почитать про основные концепции GraphQL можно в официальной документации.
Graphene-Django позволит легко добавить соответствующую функциональность в ваш проект. Модели, формы, аутентификация, политики разрешений и другие функциональные возможности Django можно использовать для создания GraphQL API. Библиотека так же поставляется с утилитой для тестирования результата.
Недостатки Джанго
Django ORM
Django ORM сегодня значительно уступает последней SQLAlchemy.
Django ORM основан на шаблоне Active Record, который хуже, чем шаблон Unit of Work, используемый в SQLAlchemy. На практике это выражается в том, что в Django модели могут «сохранять» себя по желанию, а транзакции отключены по умолчанию. Подробнее об этом можно почитать в статье «Вещи, которые мне не нравятся в Django».
Django развивается медленно
Django является большим и монолитным фреймворком. Это позволяет сообществу разрабатывать сотни универсальных модулей и приложений, но снижает скорость разработки самого Django. Кроме того, фреймворк должен поддерживать обратную совместимость, поэтому он развивается относительно медленно.
В итоге: должен ли я выбрать Django?
Хотя Django ORM не так гибок, как SQLAlchemy, а большая экосистема многократно используемых модулей и приложений замедляет развитие инфраструктуры, очевидно, Django должен быть первым кандидатом на роль фреймворка для питониста.
Альтернативные легкие фреймворки типа Flask, хотя и позволяют быть свободнее Django в экосистеме и конфигурации, могут потребовать лишнего времени на поиск/создание дополнительных библиотек и функциональных возможностей в долгосрочной перспективе.
Стабильность Django и сообщество вокруг него выросли до невообразимых размеров с момента первого релиза. Официальная документация и учебные пособия по фреймворку являются одними из лучших в своём роде. А с каждой новой версией Django продолжает обрастать возможностями.