Введение

Python web framework Django (/dʒ//æ//ŋ//ɡ//oʊ/ JANGgoh; иногда стилизованный как django) – это бесплатный и открытый веб-фреймворк на языке Python, работающий на веб-сервере. Он следует архитектурному шаблону «модель-шаблон-представление» (MTV). Поддержка фреймворка осуществляется Django Software Foundation (DSF) – независимой организацией, зарегистрированной в США как некоммерческая организация 501(c)(3). Основная цель Django – упростить создание сложных веб-сайтов, работающих с базами данных. Фреймворк делает акцент на повторном использовании и возможности подключения компонентов, минимальном объеме кода, слабой связанности, быстрой разработке и принципе DRY ("Don't Repeat Yourself"). Python используется повсеместно, включая настройки, файлы и модели данных. Django также предоставляет опциональный административный интерфейс для создания, чтения, обновления и удаления данных, который генерируется динамически с помощью интроспекции и настраивается через административные модели. Среди известных сайтов, использующих Django, – Instagram, Mozilla, Disqus, Bitbucket, Nextdoor и Clubhouse.

История

Django был создан осенью 2003 года, когда веб-программисты газеты Lawrence Journal World, Адриан Холовати и Саймон Уиллисон, начали использовать Python для разработки приложений. Джейкоб Каплан Мосс был нанят на ранней стадии разработки Django незадолго до завершения стажировки Саймона Уиллисона. Он был опубликован под лицензией BSD в июле 2005 года. Фреймворк получил название в честь гитариста Джанго Рейнхардта. Адриан Холовати – ромский джазовый гитарист, вдохновленный, в частности, музыкой Рейнхардта. В июне 2008 года было объявлено о создании Django Software Foundation (DSF), которая в дальнейшем будет поддерживать Django.

Расширяемость

Конфигурационная система Django позволяет подключать код сторонних разработчиков к обычному проекту, при условии соблюдения соглашений о повторно используемых приложениях. Доступно более 5000 пакетов для расширения базовой функциональности фреймворка, предлагающих решения задач, которые изначально не решались: регистрация пользователей, поиск, предоставление и использование API, системы управления контентом и т.д. Однако эта расширяемость ограничена зависимостями внутренних компонентов. Несмотря на то, что философия Django подразумевает слабую связанность, фильтры и теги шаблонов рассчитаны на использование одной системы шаблонов, а встроенные приложения для аутентификации и администрирования требуют использования внутреннего ORM. Ни один из этих фильтров или встроенных приложений не является обязательным для запуска проекта Django, но повторно используемые приложения часто зависят от них, что побуждает разработчиков продолжать использовать официальный стек для полноценного использования экосистемы приложений.

Устройство серверов

Django может работать в сочетании с Apache, Nginx с использованием WSGI, Gunicorn или Cherokee с помощью flup (модуля Python). Django также включает возможность запуска сервера FastCGI, что позволяет использовать его с любым веб-сервером, поддерживающим FastCGI, например, Lighttpd или Hiawatha. Также возможно использование других веб-серверов, соответствующих стандарту WSGI. Django официально поддерживает пять серверных частей для баз данных: PostgreSQL, MySQL, MariaDB, SQLite и Oracle. Microsoft SQL Server можно использовать с django mssql, а также существуют сторонние серверные части для IBM Db2, SQL Anywhere и Firebird. Существует форк под названием django nonrel, который поддерживает NoSQL базы данных, такие как MongoDB и Google App Engine's Datastore. Django также может работать с Python на любом Java EE сервере приложений, таком как GlassFish или JBoss. В этом случае необходимо установить django jython для обеспечения драйверами JDBC для подключения к базам данных, что также может предоставить возможность компиляции Django в WAR-файл, подходящий для развертывания.

История версий

Команда Django иногда определяет определенные релизы как релизы "длительной поддержки" (LTS). Для релизов LTS в течение гарантированного периода времени, обычно более 3 лет, применяются исправления безопасности и предотвращения потери данных, независимо от скорости последующих выпусков.

Версия | Дата выпуска | Конец основной поддержки | Конец расширенной поддержки | Замечания
------- | -------- | -------- | -------- | --------
scope="row" format=dmy | | | | "новый админ"
scope="row" format=dmy | | | | "удаление магии"
scope="row" format=dmy | | | | "newforms", инструменты тестирования
scope="row" format=dmy | | | | стабильность API, отсоединенный админ, Unicode
scope="row" format=dmy | | | | агрегаты, транзакционные тесты
scope="row" format=dmy | | | | множественные подключения к БД, CSRF, валидация моделей
scope="row" format=dmy | | | | классовые представления, статические файлы
scope="row" format=dmy | | | | часовые пояса, тестирование в браузере, шаблоны приложений
scope="row" format=dmy | | | | поддержка Python 3, настраиваемая модель пользователя
scope="row" format=dmy | | | | посвящено Малкольму Трединнику, управление транзакциями БД, объединение соединений
scope="row" format=dmy | | | | миграции, загрузка и конфигурация приложений
scope="row" format=dmy | | | | нативная поддержка нескольких движков шаблонов. Поддержка завершена 1 апреля 2018 г.
scope="row" format=dmy | | | | автоматическая проверка пароля. Новый стиль интерфейса администратора.
scope="row" format=dmy | | | | полнотекстовый поиск для PostgreSQL. Новая стилизация middleware.
scope="row" format=dmy | | | | последняя версия, поддерживающая Python 2.7. Поддержка завершена 1 апреля 2020 г.
scope="row" format=dmy | | | | первый релиз, работающий только с Python 3, упрощенный синтаксис маршрутизации URL, удобный для мобильных устройств админ.
scope="row" format=dmy | | | | разрешение "просмотра" модели.
scope="row" format=dmy | | | | выпуск безопасности.
scope="row" format=dmy | | | | поддержка ASGI
scope="row" format=dmy | | | | асинхронные представления и middleware
scope="row" format=dmy | апрель 2024 | | | отслеживание связей "многие ко многим", добавлена поддержка Python 3.11
scope="row" format=dmy | апрель 2023 | | | поддержка pytz устарела и будет удалена в Django 5.0.
scope="row" format=dmy | апрель 2023 | декабрь 2023 | | асинхронный интерфейс ORM, настройка CSRF COOKIE MASKED, вывод формы, например `<form>`
scope="row" format=dmy | декабрь 2023 | апрель 2026 | | поддержка Psycopg 3, ENGINE как `django.db.backends.postgresql` поддерживает обе библиотеки.
scope="row" format=dmy | август 2024 | апрель 2025 | |