Django

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

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

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

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

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

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

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

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

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

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

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

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

Архитектура

Архитектура 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 доступа к БД с поддержкой транзакций[14]
  • встроенный интерфейс администратора,[15] с уже имеющимися переводами на многие языки
  • возможность создания кастомных административных панелей с помощью Django Admin Panel Builder.
  • диспетчер URL на основе регулярных выражений[16]
  • расширяемая система шаблонов с тегами и наследованием[17]
  • система кеширования[18]
  • система хеширования
  • интернационализация[19]
  • подключаемая архитектура приложений, которые можно устанавливать на любые Django-сайты
  • «generic views» — шаблоны функций контроллеров
  • авторизация и аутентификация, подключение внешних модулей аутентификации: LDAP, OpenID, OAuth и проч.
  • система фильтров («middleware») для построения дополнительных обработчиков запросов, как например включённые в дистрибутив фильтры для кеширования, сжатия, нормализации URL и поддержки анонимных сессий
  • библиотека для работы с формами (наследование, построение форм по существующей модели БД)[20]
  • встроенная автоматическая документация по тегам шаблонов и моделям данных, доступная через административное приложение
  • интеграция с системами электронной почты (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)[21]. Они получают обновления по безопасности и по защите от потерь данных на гарантированный период времени, обычно от трёх лет.

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

Решения

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

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

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[54] позволяет использовать для работы любую версию Django.

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

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

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

Примечания

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

Ссылки