Django (Джанго, ) — свободный фреймворк для веб-приложений на языке Python, использующий шаблон проектирования MVC. Проект поддерживается организацией Django Software Foundation.
Сайт на Django строится из одного или нескольких приложений, которые рекомендуется делать отчуждаемыми и подключаемыми. Это одно из существенных архитектурных отличий этого фреймворка от некоторых других (например, Ruby on Rails). Один из основных принципов фреймворка — DRY ()
Также, в отличие от других фреймворков, обработчики URL в Django конфигурируются явно при помощи регулярных выражений.
Для работы с базой данных Django использует собственный ORM, в котором модель данных описывается классами Python, и по ней генерируется схема базы данных.
Использование Веб-фреймворк Django используется в сайтах Instagram, Disqus, Mozilla, The Washington Times, Pinterest, YouTube, Google и др.
Также Django используется в качестве веб-компонента в проектах:
Graphite — система построения графиков и наблюдения FreeNAS — свободная реализация системы хранения и обмена файлами и др.
Разработчики Расселл Кейт-Маги () Адриан Головатый (), Саймон Виллисон (), Джейкоб Каплан-Мосс (), Уилсон Майнер ()
Разработчики заявляют, что не обязуются строго придерживаться какой бы то ни было методологии в развитии проекта, предпочитая делать то, что кажется им наиболее логичным.
Архитектура Архитектура Django похожа на «Модель-Представление-Контроллер» (MVC). Контроллер классической модели MVC примерно соответствует уровню, который в Django называется Представление (), а презентационная логика Представления реализуется в Django уровнем Шаблонов (). Из-за этого уровневую архитектуру Django часто называют «Модель-Шаблон-Представление» (MTV).
Первоначальная разработка Django как средства для работы новостных ресурсов достаточно сильно отразилась на его архитектуре: он предоставляет ряд средств, которые помогают в быстрой разработке веб-сайтов информационного характера. Так, например, разработчику не требуется создавать контроллеры и страницы для административной части сайта, в Django есть встроенное приложение для управления содержимым, которое можно включить в любой сайт, сделанный на Django, и которое может управлять сразу несколькими сайтами на одном сервере. Административное приложение позволяет создавать, изменять и удалять любые объекты наполнения сайта, протоколируя все совершённые действия, и предоставляет интерфейс для управления пользователями и группами (с пообъектным назначением прав).
В дистрибутив Django также включены приложения для системы комментариев, синдикации RSS и Atom, «статических страниц» (которыми можно управлять без необходимости писать контроллеры и представления), перенаправления URL и другое.
Джанго также предлагает множество инструментов и утилит, которые облегчают разработку веб-приложений, такие как встроенная система аутентификации и авторизации, обработка форм, валидация данных, механизмы кэширования, миграции баз данных и многое другое.
Система URL-маршрутизации Django позволяет легко определять структуру URL-адресов приложения и их соответствующие обработчики представлений (views), что способствует лучшей организации кода и повышает его читаемость.
Благодаря использованию ORM (Object-Relational Mapping), Django обеспечивает абстракцию от деталей взаимодействия с базой данных, что упрощает работу с данными и делает код более переносимым и поддерживаемым.
Возможности Некоторые возможности Django:
ORM, API доступа к БД с поддержкой транзакций встроенный интерфейс администратора, с уже имеющимися переводами на многие языки возможность создания кастомных административных панелей с помощью Django Admin Panel Builder. диспетчер URL на основе регулярных выражений расширяемая система шаблонов с тегами и наследованием система кеширования система хеширования интернационализация подключаемая архитектура приложений, которые можно устанавливать на любые Django-сайты «generic views» — шаблоны функций контроллеров авторизация и аутентификация, подключение внешних модулей аутентификации: LDAP, OpenID, OAuth и проч. система фильтров («middleware») для построения дополнительных обработчиков запросов, как например включённые в дистрибутив фильтры для кеширования, сжатия, нормализации URL и поддержки анонимных сессий библиотека для работы с формами (наследование, построение форм по существующей модели БД) встроенная автоматическая документация по тегам шаблонов и моделям данных, доступная через административное приложение интеграция с системами электронной почты (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). Они получают обновления по безопасности и по защите от потерь данных на гарантированный период времени, обычно от трёх лет.
Версия Дата выпускаОкончание основной поддержкиОкончание расширенной поддержки Примечание scope="row" . Django weblog. Retrieved 2 February 2013. scope="row" . Django weblog. Retrieved 2 February 2013. «new-admin» scope="row" . Django weblog. Retrieved 2 February 2013. «magic removal» scope="row" . Django weblog. Retrieved 2 February 2013. «newforms», средства тестирования scope="row" . Django weblog. Retrieved 2 February 2013. Стабильная API, admin-инструменты «отсоединены» от основных, поддержка unicode scope="row" . Django weblog. Retrieved 2 February 2013. Агрегация (в ORM), транзакционные тесты scope="row" . Django weblog. Retrieved 2 February 2013. Множественные db-коннекты, CSRF, model-валидатор scope="row" . Django weblog. Retrieved 2 February 2013. Вьюшки на основе классов, поддержка static-файлов scope="row" . Django weblog. Retrieved 2 February 2013. Поддержка timezone, «in browser» тесты, шаблоны приложений. scope="row" Django weblog. Retrieved 27 February 2013. Поддержка Python 3, конфигурируемые user model scope="row" Django weblog. Retrieved 6 November 2013. Управление db-транзакциями, объединение пулов. scope="row" Django weblog. Retrieved 4 September 2014. Миграции, загрузка и конфигурация приложений. scope="row" Django weblog. Retrieved 2 April 2015. Встроена поддержка нескольких шаблонизаторов. LTS с поддержкой до апреля 2018 scope="row" Django weblog. Retrieved 1 December 2015. Автоматическая проверка паролей, новый стиль admin-интерфейса. scope="row" Django weblog. Retrieved 1 August 2016. Полнотекстовый поиск для PostgreSQL. Новый стиль middleware scope="row" Django weblog. Retrieved 4 April 2017. Последняя версия с поддержкой Python 2.7. LTS с поддержкой до апреля 2020 года scope="row" Django weblog. Retrieved 3 December 2017. Первая версия с поддержкой только Python 3, упрощенный синтаксис маршрутизации URL, «админка» с дружественным мобильным интерфейсом. scope="row" Django weblog. Retrieved 2 August 2018. Разрешение view для моделей администратора. scope="row" Retrieved 2 August 2018. Выпуск безопасности. scope="row" Поддержка MariaDB, ASGI scope="row" Асинхронные view и middleware, JSONField для всех поддерживаемых БД scope="row" апрель 2024 Отслеживание отношений «многие ко многим», добавлена поддержка Python 3.11 scope="row" апрель 2023 scope="row" апрель 2023 декабрь 2023 Асинхронный интерфейс к ORM scope="row" декабрь 2023 апрель 2026 Поддержка Psycopg 3, ENGINE как django.db.backends.postgresql поддерживает обе библиотеки. scope="row" август 2024апрель 2025Фильтры фасетов в админке, упрощенные шаблоны для отображения полей формы scope="row" апрель 2025декабрь 2025Добавлена поддержка Python 3.13. Добавлена поддержка пулов соединений PostgreSQL. scope="row" декабрь 2025апрель 2028Автоматический импорт модели в оболочку, поддержка составных первичных ключей scope="row" август 2026 апрель 2027
Решения На базе Django разработан ряд готовых решений со свободной лицензией, среди которых интернет-магазины, системы управления содержимым, а также более узконаправленные проекты.
Конфигурация сервера 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: OpenShift, в том числе и бесплатноRapid Python and Django App Deployment to the Cloud with a PaaS на github на github Heroku На хостинге PythonAnywhere.
Django на хостинге Google Google App Engine Python позволяет использовать для работы любую версию Django.
Существуют некоторые особенности при работе с Django в Google App Engine Python 2.7.
Django ОRМ несовместим с хранилищем App Engine Datastore, который представляет собой NoSQL хранилище. Это в свою очередь делает ограниченной работу определённых функций фреймворка, в частности, встроенного административного интерфейса. Также с Django можно работать через Google cloud-sql. Это позволяет использовать все возможности фреймворка, как и при работе с обычными реляционными базами.
Существует community-версия Django-nonrel, адаптированная для работы с нереляционными хранилищами данных, которая позволяет полноценно (насколько это возможно технически) использовать Django на платформе Google App Engine. А подключаемое приложение django-dbindexer позволяет даже эмулировать JOIN в нереляционных хранилищах данных.
Примечания
Литература
Ссылки
Wiki и сообщения об ошибках.
Свободная книга о Django. (русский перевод) Топ-10 ошибок, которые Django разработчики делают
Категория:Свободные библиотеки программ Категория:Свободное программное обеспечение, написанное на Python Категория:Библиотеки Python Категория:Веб-фреймворки на Python Категория:Программное обеспечение с лицензией BSD Категория:Кроссплатформенное программное обеспечение Категория:Свободное серверное программное обеспечение Категория:Программное обеспечение, разработанное в 2003 году Категория:Генераторы программного кода