Django
Django (Джанго, ['dʒæŋɡoʊ][8]) — свободный фреймворк для веб-приложений на языке Python, использующий шаблон проектирования MVC[9]. Проект поддерживается организацией Django Software Foundation.
Django | |
---|---|
Тип | веб-фреймворк |
Автор | Lawrence Journal-World[d][1] |
Разработчик | Django Software Foundation |
Написана на | Python[2] |
Интерфейс | веб-интерфейс |
Операционная система | кроссплатформенность |
Первый выпуск | 2005[1] |
Последняя версия | |
Состояние | В активном развитии |
Лицензия | модифицированная лицензия BSD[d][6][7] |
Сайт | djangoproject.com (англ.) |
Медиафайлы на Викискладе |
Сайт на Django строится из одного или нескольких приложений, которые рекомендуется делать отчуждаемыми и подключаемыми. Это одно из существенных архитектурных отличий этого фреймворка от некоторых других (например, Ruby on Rails). Один из основных принципов фреймворка — DRY (англ. Don't repeat yourself)
Также, в отличие от других фреймворков, обработчики URL в Django конфигурируются явно при помощи регулярных выражений.
Для работы с базой данных Django использует собственный ORM, в котором модель данных описывается классами Python, и по ней генерируется схема базы данных.[10]
Пример веб-приложения, которое показывает «Hello World!»:
1 from django.http import HttpResponse
2
3 def hello(request):
4 return HttpResponse("Hello world")
Использование
Веб-фреймворк Django используется в сайтах Instagram[11], Disqus[12], Mozilla[13], The Washington Times, Pinterest, YouTube, Google и др.
Также Django используется в качестве веб-компонента в проектах:
Разработчики
- Расселл Кейт-Маги (англ. Russell Keith-Magee)
- Адриан Головатый (англ. Adrian Holovaty),
- Саймон Виллисон (англ. Simon Willison),
- Джейкоб Каплан-Мосс (англ. Jacob Kaplan-Moss),
- Уилсон Майнер (англ. Wilson Miner)
Разработчики заявляют, что не обязуются строго придерживаться какой бы то ни было методологии в развитии проекта, предпочитая делать то, что кажется им наиболее логичным.[15]
Архитектура
Архитектура Django похожа на «Модель-Представление-Контроллер» (MVC). Контроллер классической модели MVC примерно соответствует уровню, который в Django называется Представление (англ. View), а презентационная логика Представления реализуется в Django уровнем Шаблонов (англ. Template). Из-за этого уровневую архитектуру Django часто называют «Модель-Шаблон-Представление» (MTV).
Первоначальная разработка Django как средства для работы новостных ресурсов достаточно сильно отразилась на его архитектуре: он предоставляет ряд средств, которые помогают в быстрой разработке веб-сайтов информационного характера. Так, например, разработчику не требуется создавать контроллеры и страницы для административной части сайта, в Django есть встроенное приложение для управления содержимым, которое можно включить в любой сайт, сделанный на Django, и которое может управлять сразу несколькими сайтами на одном сервере. Административное приложение позволяет создавать, изменять и удалять любые объекты наполнения сайта, протоколируя все совершённые действия, и предоставляет интерфейс для управления пользователями и группами (с пообъектным назначением прав).
В дистрибутив Django также включены приложения для системы комментариев, синдикации RSS и Atom, «статических страниц» (которыми можно управлять без необходимости писать контроллеры и представления), перенаправления URL и другое.
Возможности
Некоторые возможности Django:
- ORM, API доступа к БД с поддержкой транзакций[16]
- встроенный интерфейс администратора,[17] с уже имеющимися переводами на многие языки
- диспетчер URL на основе регулярных выражений[18]
- расширяемая система шаблонов с тегами и наследованием[19]
- система кеширования[20]
- интернационализация[21]
- подключаемая архитектура приложений, которые можно устанавливать на любые Django-сайты
- «generic views» — шаблоны функций контроллеров
- авторизация и аутентификация, подключение внешних модулей аутентификации: LDAP, OpenID и проч.
- система фильтров («middleware») для построения дополнительных обработчиков запросов, как например включённые в дистрибутив фильтры для кеширования, сжатия, нормализации URL и поддержки анонимных сессий
- библиотека для работы с формами (наследование, построение форм по существующей модели БД)[22]
- встроенная автоматическая документация по тегам шаблонов и моделям данных, доступная через административное приложение
Некоторые компоненты фреймворка между собой связаны слабо, поэтому их можно достаточно просто заменять на аналогичные. Например, вместо встроенных шаблонов можно использовать Mako или Jinja.
В то же время заменять ряд компонентов (например, ORM) довольно сложно.
Помимо возможностей, встроенных в ядро фреймворка, существуют пакеты, расширяющие его возможности. Возможности, предоставляемые пакетами, а также полный перечень пакетов удобно отслеживать через специальный ресурс — www.djangopackages.com.
Версии и хронология их выхода
Некоторые выпуски Django получают статус «релиза с долгосрочной поддержкой» (LTS)[23]. Они получают обновления по безопасности и по защите от потерь данных на гарантированный период времени, обычно от трёх лет.
Версия | Дата[24] | Примечание |
---|---|---|
[25] | 0.9016 ноя 2005 | |
[26] | 0.9111 янв 2006 | «new-admin» |
[27] | 0.9529 июл 2006 | «magic removal» |
[28] | 0.9623 мар 2007 | «newforms», средства тестирования |
[29] | 1.03 сен 2008 | Стабильная API, admin-инструменты «отсоединены» от основных, поддержка unicode |
[30] | 1.129 июл 2009 | Агрегация (в ORM), транзакционные тесты |
[31] | 1.217 май 2010 | Множественные db-коннекты, CSRF, model-валидатор |
[32] | 1.323 мар 2011 | Вьюшки на основе классов, поддержка static-файлов |
[33] | 1.4 LTS23 мар 2012 | Поддержка timezone, «in browser» тесты, шаблоны приложений. |
[34] | 1.526 фев 2013 | Поддержка Python 3, конфигурируемые user model |
[35] | 1.66 ноя 2013 | Управление db-транзакциями, объединение пулов. |
[36] | 1.72 сен 2014 | Миграции, загрузка и конфигурация приложений. |
[37] | 1.8 LTS1 апр 2015 | Встроена поддержка нескольких шаблонизаторов. LTS с поддержкой до апреля 2018 |
[38] | 1.91 дек 2015 | Автоматическая проверка паролей, новый стиль admin-интерфейса. |
[39] | 1.101 авг 2016 | Полнотекстовый поиск для PostgreSQL. Новый стиль middleware |
[40] | 1.11 LTS4 апр 2017 | Последняя версия с поддержкой Python 2.7. LTS с поддержкой до апреля 2020 года |
[41] | 2.02 дек 2017 | Первая версия с поддержкой только Python 3, упрощенный синтаксис маршрутизации URL, «админка» с дружественным мобильным интерфейсом. |
[42] | 2.11 авг 2018 | Разрешение view для моделей администратора. |
[43] | 2.2 LTSапр 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 | |
Старая версия, не поддерживается Старая поддерживаемая версия Текущая версия Тестовая версия Будущая версия |
Решения
На базе Django разработан ряд готовых решений со свободной лицензией[44], среди которых интернет-магазины, системы управления содержимым, а также более узконаправленные проекты.
Конфигурация сервера
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[51] позволяет использовать для работы любую версию Django.
Существуют некоторые особенности при работе с Django в Google App Engine Python 2.7.
- Django ОRМ несовместим с хранилищем App Engine Datastore, который представляет собой NoSQL хранилище. Это в свою очередь делает ограниченной работу определённых функций фреймворка, в частности, встроенного административного интерфейса[52].
- Также с Django можно работать через Google cloud-sql[53]. Это позволяет использовать все возможности фреймворка, как и при работе с обычными реляционными базами.[54]
Существует community-версия Django-nonrel[55], адаптированная для работы с нереляционными хранилищами данных, которая позволяет полноценно (насколько это возможно технически) использовать Django на платформе Google App Engine. А подключаемое приложение django-dbindexer[56] позволяет даже эмулировать JOIN в нереляционных хранилищах данных.
Примечания
- http://www.djangobook.com/en/2.0/chapter01.html#django-s-history
- The django Open Source Project on Open Hub: Languages Page — 2006.
- Django security releases issued: 4.0.2, 3.2.12, and 2.2.27 — 2022.
- Django 4.0.2 release notes — 2022.
- https://github.com/django/django/releases/tag/4.0.2 — 2022.
- https://github.com/django/django/blob/master/LICENSE
- The django Open Source Project on Open Hub: Licenses Page — 2006.
- What does «Django» mean, and how do you pronounce it?
- Django FAQ about MVC in Django
- Маниакальный Веблог (Блог Ивана Сагалаева)
- What Powers Instagram: Hundreds of Instances, Dozens of Technologies - Instagram Engineering . Дата обращения: 6 января 2013. Архивировано 20 января 2013 года.
- Welcome, David Cramer | Disqus: The Official Blog . Дата обращения: 6 января 2013. Архивировано 20 января 2013 года.
- The MDN platform (Kuma) | MDN (недоступная ссылка). Дата обращения: 6 января 2013. Архивировано 27 января 2013 года.
- Working on Graphite-web
- Django FAQ
- DjangoBook. Глава 5. Работа с базой данных: Модели
- DjangoBook. Глава 6. Интерфейс администратора Django
- DjangoBook. Глава 3. Основы динамических страниц
- DjangoBook. Глава 10. Расширения для шаблонной системы
- DjangoBook. Глава 13. Кэширование
- DjangoBook. Глава 18. Интернационализация
- Djangodoc.ru. Использование форм
- Django’s release process | Django documentation | Django (англ.). www.djangoproject.com.
- Release notes | Django documentation | Django (англ.). www.djangoproject.com.
- «Introducing Django 0.90». Django weblog. Retrieved 2 February 2013.
- «Django 0.91 released». Django weblog. Retrieved 2 February 2013.
- «Introducing Django 0.95». Django weblog. Retrieved 2 February 2013.
- «Announcing Django 0.96!». Django weblog. Retrieved 2 February 2013.
- «Django 1.0 released!». Django weblog. Retrieved 2 February 2013.
- «Django 1.1 released». Django weblog. Retrieved 2 February 2013.
- «Django 1.2 released». Django weblog. Retrieved 2 February 2013.
- «Django 1.3 released». Django weblog. Retrieved 2 February 2013.
- «Django 1.4 released». Django weblog. Retrieved 2 February 2013.
- «Django 1.5 released» Django weblog. Retrieved 27 February 2013.
- «Django 1.6 released» Django weblog. Retrieved 6 November 2013.
- «Django 1.7 released» Django weblog. Retrieved 4 September 2014.
- «Django 1.8 released» Django weblog. Retrieved 2 April 2015.
- «Django 1.9 released» Django weblog. Retrieved 1 December 2015.
- «Django 1.10 released» Django weblog. Retrieved 1 August 2016.
- «Django 1.11 released» Django weblog. Retrieved 4 April 2017.
- «Django 2.0 released» Django weblog. Retrieved 3 December 2017.
- «Django 2.1 released» Django weblog. Retrieved 2 August 2018.
- How to get Django Retrieved 2 August 2018.
- Open-Source Django projects
- Pricing | OpenShift by Red Hat . Дата обращения: 6 января 2013.
- Rapid Python and Django App Deployment to the Cloud with a PaaS
- openshift / openshift-diy-py27-django (недоступная ссылка — история ). на github
- openshift / django-example . Архивировано 4 августа 2014 года. на github
- Getting Started on Heroku with Python
- Deploying an existing Django project on PythonAnywhere
- Google App Engine Python
- Third-party Libraries in Python 2.7 - Google App Engine — Google Developers . Дата обращения: 6 января 2013.
- Google cloud-sql
- Django Support - Google App Engine — Google Developers . Дата обращения: 6 января 2013.
- Django-nonrel (недоступная ссылка — история ).
- 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.
Ссылки
- djangoproject.com (англ.) — официальный сайт Django
- Wiki и сообщения об ошибках. (англ.)
- Проект Django на сайте GitHub
- Свободная книга о Django. (англ.) (русский перевод, в ePub (недоступная ссылка). Архивировано 22 мая 2011 года.).
- Сравнение каркасов веб-приложений
- Топ-10 ошибок, которые Django разработчики делают