Django

Django
Логотип программы Django
Скриншот программы Django
Тип веб-фреймворк
Авторы Adrian Holovaty, Simon Willison
Разработчик Django Software Foundation[1]
Написана на Python[1]
Интерфейс веб-интерфейс
Операционная система кроссплатформенность
Первый выпуск 21 июля 2005; 18 лет назад (2005-07-21)[2]
Последняя версия
Репозиторий github.com/django/django
Состояние В активном развитии
Лицензия 3-clause BSD[4]
Сайт djangoproject.com (англ.)
Логотип Викисклада Медиафайлы на Викискладе

Django (Джанго, ['dʒæŋɡoʊ][5]) — свободный фреймворк для веб-приложений на языке Python, использующий шаблон проектирования MVC[6]. Проект поддерживается организацией Django Software Foundation.

Сайт на Django строится из одного или нескольких приложений, которые рекомендуется делать отчуждаемыми и подключаемыми. Это одно из существенных архитектурных отличий этого фреймворка от некоторых других (например, Ruby on Rails). Один из основных принципов фреймворка — DRY (англ. Don't repeat yourself)

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

Для работы с базой данных Django использует собственный ORM, в котором модель данных описывается классами Python, и по ней генерируется схема базы данных.[7]

Использование

Веб-фреймворк Django используется в сайтах Instagram[8], Disqus[9], Mozilla[10], The Washington Times, Pinterest, YouTube, Google и др.

Также Django используется в качестве веб-компонента в проектах:

  • Graphite[11] — система построения графиков и наблюдения
  • FreeNAS — свободная реализация системы хранения и обмена файлами и др.

Разработчики

  • Расселл Кейт-Маги (англ. Russell Keith-Magee)
  • Адриан Головатый (англ. Adrian Holovaty),
  • Саймон Виллисон (англ. Simon Willison),
  • Джейкоб Каплан-Мосс (англ. Jacob Kaplan-Moss),
  • Уилсон Майнер (англ. Wilson Miner)

Разработчики заявляют, что не обязуются строго придерживаться какой бы то ни было методологии в развитии проекта, предпочитая делать то, что кажется им наиболее логичным.[12]

Архитектура

Архитектура Django похожа на «Модель-Представление-Контроллер» (MVC). Контроллер классической модели MVC примерно соответствует уровню, который в Django называется Представление (англ. View), а презентационная логика Представления реализуется в Django уровнем Шаблонов (англ. Template). Из-за этого уровневую архитектуру Django часто называют «Модель-Шаблон-Представление» (MTV).

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

В дистрибутив Django также включены приложения для системы комментариев, синдикации RSS и Atom, «статических страниц» (которыми можно управлять без необходимости писать контроллеры и представления), перенаправления URL и другое.

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

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

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

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

Возможности

Некоторые возможности Django:

  • ORM, API доступа к БД с поддержкой транзакций[13]
  • встроенный интерфейс администратора,[14] с уже имеющимися переводами на многие языки
  • возможность создания кастомных административных панелей с помощью Django Admin Panel Builder.
  • диспетчер URL на основе регулярных выражений[15]
  • расширяемая система шаблонов с тегами и наследованием[16]
  • система кеширования[17]
  • система хеширования
  • интернационализация[18]
  • подключаемая архитектура приложений, которые можно устанавливать на любые Django-сайты
  • «generic views» — шаблоны функций контроллеров
  • авторизация и аутентификация, подключение внешних модулей аутентификации: LDAP, OpenID, OAuth и проч.
  • система фильтров («middleware») для построения дополнительных обработчиков запросов, как например включённые в дистрибутив фильтры для кеширования, сжатия, нормализации URL и поддержки анонимных сессий
  • библиотека для работы с формами (наследование, построение форм по существующей модели БД)[19]
  • встроенная автоматическая документация по тегам шаблонов и моделям данных, доступная через административное приложение
  • интеграция с системами электронной почты (SMTP), включая настройку шаблонов электронных писем на разных языках
  • поддержка виртуальных сред (Python virtual environment) для изоляции проектов и их зависимостей.
  • возможность создания RESTful API с помощью Django REST Framework.
  • интеграция с системами хранения файлов, включая Yandex Cloud, Amazon S3, Google Cloud Storage и другие.
  • встроенная защита от распространенных уязвимостей, таких как CSRF и XSS.

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

В то же время заменять ряд компонентов (например, ORM) довольно сложно.

Помимо возможностей, встроенных в ядро фреймворка, существуют пакеты, расширяющие его возможности. Возможности, предоставляемые пакетами, а также полный перечень пакетов удобно отслеживать через специальный ресурс — www.djangopackages.com.

Версии и хронология их выхода

Некоторые выпуски Django получают статус «релиза с долгосрочной поддержкой» (LTS)[20]. Они получают обновления по безопасности и по защите от потерь данных на гарантированный период времени, обычно от трёх лет.

Версия Дата[21] Примечание
Старая версия, не поддерживается: 0.90[22] 16 ноя 2005
Старая версия, не поддерживается: 0.91[23] 11 янв 2006 «new-admin»
Старая версия, не поддерживается: 0.95[24] 29 июл 2006 «magic removal»
Старая версия, не поддерживается: 0.96[25] 23 мар 2007 «newforms», средства тестирования
Старая версия, не поддерживается: 1.0[26] 3 сен 2008 Стабильная API, admin-инструменты «отсоединены» от основных, поддержка unicode
Старая версия, не поддерживается: 1.1[27] 29 июл 2009 Агрегация (в ORM), транзакционные тесты
Старая версия, не поддерживается: 1.2[28] 17 май 2010 Множественные db-коннекты, CSRF, model-валидатор
Старая версия, не поддерживается: 1.3[29] 23 мар 2011 Вьюшки на основе классов, поддержка static-файлов
Старая версия, не поддерживается: 1.4 LTS[30] 23 мар 2012 Поддержка timezone, «in browser» тесты, шаблоны приложений.
Старая версия, не поддерживается: 1.5[31] 26 фев 2013 Поддержка Python 3, конфигурируемые user model
Старая версия, не поддерживается: 1.6[32] 6 ноя 2013 Управление db-транзакциями, объединение пулов.
Старая версия, не поддерживается: 1.7[33] 2 сен 2014 Миграции, загрузка и конфигурация приложений.
Старая версия, не поддерживается: 1.8 LTS[34] 1 апр 2015 Встроена поддержка нескольких шаблонизаторов. LTS с поддержкой до апреля 2018
Старая версия, не поддерживается: 1.9[35] 1 дек 2015 Автоматическая проверка паролей, новый стиль admin-интерфейса.
Старая версия, не поддерживается: 1.10[36] 1 авг 2016 Полнотекстовый поиск для PostgreSQL. Новый стиль middleware
Старая версия, не поддерживается: 1.11 LTS[37] 4 апр 2017 Последняя версия с поддержкой Python 2.7. LTS с поддержкой до апреля 2020 года
Старая версия, не поддерживается: 2.0[38] 2 дек 2017 Первая версия с поддержкой только Python 3, упрощенный синтаксис маршрутизации URL, «админка» с дружественным мобильным интерфейсом.
Старая версия, не поддерживается: 2.1[39] 1 авг 2018 Разрешение view для моделей администратора.
Старая версия, не поддерживается: 2.2 LTS[40] апр 2019 LTS с поддержкой до апреля 2022 года
Старая версия, не поддерживается: 3.0 2 дек 2019 Поддержка MariaDB, ASGI
Старая версия, не поддерживается: 3.1 4 авг 2020 Асинхронные view и middleware, JSONField для всех поддерживаемых БД
Старая поддерживаемая версия: 3.2 LTS апр 2021 LTS с поддержкой до апреля 2024 года
Старая версия, не поддерживается: 4.0 дек 2021
Старая поддерживаемая версия: 4.1 3 авг 2022 Асинхронный интерфейс к ORM
Текущая версия: 4.2 LTS 3 апр 2023 LTS с поддержкой до апреля 2026 года
Будущая версия: 5.0 дек 2023
Легенда:
Старая версия, не поддерживается
Старая поддерживаемая версия
Текущая версия
Тестовая версия
Будущая версия

Решения

На базе Django разработан ряд готовых решений со свободной лицензией[41], среди которых интернет-магазины, системы управления содержимым, а также более узконаправленные проекты.

Конфигурация сервера

Django проектировался для работы под управлением Apache с модулем mod python и с использованием PostgreSQL в качестве базы данных.

С включением поддержки WSGI, Django может работать под управлением FastCGI, mod wsgi, или SCGI на Apache и других серверах (lighttpd, nginx,…), сервера uWSGI.

В настоящее время, помимо базы данных PostgreSQL, Django может работать с другими СУБД: MySQL, SQLite, Microsoft SQL Server, DB2, Firebird, SQL Anywhere и Oracle.

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

Хостинг для Django

Django можно развернуть на PaaS-сервисах RedHat:

Django на хостинге Google

Google App Engine Python[48] позволяет использовать для работы любую версию Django.

Существуют некоторые особенности при работе с Django в Google App Engine Python 2.7.

  • Django ОRМ несовместим с хранилищем App Engine Datastore, который представляет собой NoSQL хранилище. Это в свою очередь делает ограниченной работу определённых функций фреймворка, в частности, встроенного административного интерфейса[49].
  • Также с Django можно работать через Google cloud-sql[50]. Это позволяет использовать все возможности фреймворка, как и при работе с обычными реляционными базами.[51]

Существует community-версия Django-nonrel[52], адаптированная для работы с нереляционными хранилищами данных, которая позволяет полноценно (насколько это возможно технически) использовать Django на платформе Google App Engine. А подключаемое приложение django-dbindexer[53] позволяет даже эмулировать JOIN в нереляционных хранилищах данных.

Примечания

  1. 1 2 django/README  (неопр.). GitHub. Дата обращения: 8 сентября 2020. Архивировано 30 апреля 2020 года.
  2. Django FAQ  (неопр.). Дата обращения: 27 марта 2019.
  3. Release 5.0.4 — 2024.
  4. django/LICENSE  (неопр.). GitHub. Дата обращения: 8 сентября 2020. Архивировано 12 февраля 2021 года.
  5. What does «Django» mean, and how do you pronounce it?  (неопр.) Дата обращения: 14 мая 2009. Архивировано 10 сентября 2017 года.
  6. Django FAQ about MVC in Django  (неопр.). Дата обращения: 14 мая 2009. Архивировано 10 сентября 2017 года.
  7. Маниакальный Веблог (Блог Ивана Сагалаева)  (неопр.). Дата обращения: 27 августа 2020. Архивировано 30 октября 2020 года.
  8. What Powers Instagram: Hundreds of Instances, Dozens of Technologies - Instagram Engineering  (неопр.). Дата обращения: 6 января 2013. Архивировано 20 января 2013 года.
  9. Welcome, David Cramer | Disqus: The Official Blog  (неопр.). Дата обращения: 6 января 2013. Архивировано 20 января 2013 года.
  10. The MDN platform (Kuma) | MDN  (неопр.). Дата обращения: 6 января 2013. Архивировано из оригинала 27 января 2013 года.
  11. Working on Graphite-web  (неопр.). Дата обращения: 27 августа 2020. Архивировано 9 сентября 2020 года.
  12. Django FAQ  (неопр.). Дата обращения: 14 мая 2009. Архивировано 10 сентября 2017 года.
  13. DjangoBook. Глава 5. Работа с базой данных: Модели  (неопр.). Дата обращения: 27 августа 2020. Архивировано 30 сентября 2020 года.
  14. DjangoBook. Глава 6. Интерфейс администратора Django  (неопр.). Дата обращения: 27 августа 2020. Архивировано 26 сентября 2020 года.
  15. DjangoBook. Глава 3. Основы динамических страниц  (неопр.). Дата обращения: 27 августа 2020. Архивировано 22 октября 2020 года.
  16. DjangoBook. Глава 10. Расширения для шаблонной системы  (неопр.). Дата обращения: 27 августа 2020. Архивировано 30 сентября 2020 года.
  17. DjangoBook. Глава 13. Кэширование  (неопр.). Дата обращения: 27 августа 2020. Архивировано 26 сентября 2020 года.
  18. DjangoBook. Глава 18. Интернационализация  (неопр.). Дата обращения: 27 августа 2020. Архивировано 30 сентября 2020 года.
  19. Djangodoc.ru. Использование форм  (неопр.). Дата обращения: 5 октября 2020. Архивировано 7 октября 2020 года.
  20. Django’s release process | Django documentation | Django (англ.). www.djangoproject.com. Дата обращения: 4 сентября 2021. Архивировано 9 октября 2021 года.
  21. Release notes | Django documentation | Django (англ.). www.djangoproject.com. Дата обращения: 4 сентября 2021. Архивировано 24 октября 2021 года.
  22. «Introducing Django 0.90»  (неопр.). Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
  23. «Django 0.91 released»  (неопр.). Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
  24. «Introducing Django 0.95»  (неопр.). Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
  25. «Announcing Django 0.96!»  (неопр.) Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
  26. «Django 1.0 released!»  (неопр.) Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
  27. «Django 1.1 released»  (неопр.). Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
  28. «Django 1.2 released»  (неопр.). Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
  29. «Django 1.3 released»  (неопр.). Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
  30. «Django 1.4 released»  (неопр.). Архивировано 9 июня 2017 года.. Django weblog. Retrieved 2 February 2013.
  31. «Django 1.5 released»  (неопр.). Архивировано 10 июля 2017 года. Django weblog. Retrieved 27 February 2013.
  32. «Django 1.6 released»  (неопр.). Архивировано 10 июля 2017 года. Django weblog. Retrieved 6 November 2013.
  33. «Django 1.7 released»  (неопр.). Архивировано 10 июля 2017 года. Django weblog. Retrieved 4 September 2014.
  34. «Django 1.8 released»  (неопр.). Архивировано 10 июля 2017 года. Django weblog. Retrieved 2 April 2015.
  35. «Django 1.9 released»  (неопр.). Архивировано 7 июня 2017 года. Django weblog. Retrieved 1 December 2015.
  36. «Django 1.10 released»  (неопр.). Архивировано 17 июня 2017 года. Django weblog. Retrieved 1 August 2016.
  37. «Django 1.11 released»  (неопр.). Архивировано 10 июня 2017 года. Django weblog. Retrieved 4 April 2017.
  38. «Django 2.0 released»  (неопр.). Архивировано 1 апреля 2019 года. Django weblog. Retrieved 3 December 2017.
  39. «Django 2.1 released»  (неопр.). Архивировано 1 апреля 2019 года. Django weblog. Retrieved 2 August 2018.
  40. How to get Django  (неопр.). Архивировано 30 июня 2017 года. Retrieved 2 August 2018.
  41. Open-Source Django projects  (неопр.). Дата обращения: 27 августа 2020. Архивировано 2 июля 2020 года.
  42. Pricing | OpenShift by Red Hat  (неопр.). Дата обращения: 6 января 2013. Архивировано 23 января 2013 года.
  43. Rapid Python and Django App Deployment to the Cloud with a PaaS
  44. openshift / openshift-diy-py27-django  (неопр.) (недоступная ссылка — история). на github
  45. openshift / django-example  (неопр.). Архивировано 4 августа 2014 года. на github
  46. Getting Started on Heroku with Python  (неопр.). Дата обращения: 10 мая 2018. Архивировано 10 мая 2018 года.
  47. Deploying an existing Django project on PythonAnywhere  (неопр.). Дата обращения: 25 апреля 2017. Архивировано 26 апреля 2017 года.
  48. Google App Engine Python  (неопр.). Дата обращения: 4 января 2013. Архивировано 20 января 2013 года.
  49. Third-party Libraries in Python 2.7 - Google App Engine — Google Developers  (неопр.). Дата обращения: 6 января 2013. Архивировано 16 января 2013 года.
  50. Google cloud-sql  (неопр.). Дата обращения: 4 января 2013. Архивировано 15 января 2013 года.
  51. Django Support - Google App Engine — Google Developers  (неопр.). Дата обращения: 6 января 2013. Архивировано 11 августа 2014 года.
  52. Django-nonrel  (неопр.) (недоступная ссылка — история).
  53. django-dbindexer  (неопр.). Дата обращения: 27 августа 2020. Архивировано из оригинала 9 июля 2020 года.

Литература

  • Головатый А., Каплан-Мосс Дж. Django. Подробное руководство = Django. The definitive guide to / пер. с англ.. — СПб.: Символ-Плюс, 2010. — 560 с. — (High Tech). — ISBN 978-5-93286-187-5.
  • У. Чан, П. Биссекс, Д. Форсье. Django. Разработка веб-приложений на Python = Python Web Development with Django / пер. с англ. А. Киселёв. — СПб.: Символ-Плюс, 2009. — 456 с. — (High Tech). — ISBN 978-5-93286-167-7.
  • Дронов В. А. Django 3.0. Практика создания веб-сайтов на Python. — СПб.: БХВ-Петербург, 2021. — 704 с. — ISBN 978-5-9775-6691-9.

Ссылки

Django:
  • Книги в Викиучебнике
  • Медиафайлы на Викискладе
  • djangoproject.com (англ.) — официальный сайт Django
  • Wiki и сообщения об ошибках. (англ.)
  • Проект Django на сайте GitHub
  • Свободная книга о Django(англ.) (русский перевод.
  • Топ-10 ошибок, которые Django разработчики делают
Перейти к шаблону «External links»
Ссылки на внешние ресурсы
Перейти к шаблону «Внешние ссылки» Перейти к элементу Викиданных
  В социальных сетях
  • Твиттер
Тематические сайты
  • GitHub
  • Open Hub
Словари и энциклопедии
  • Большая датская
В библиографических каталогах