Меню
Главная
Случайная статья
Настройки
|
Django (Джанго, ['do][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 — свободная реализация системы хранения и обмена файлами и др.
Разработчики
Разработчики заявляют, что не обязуются строго придерживаться какой бы то ни было методологии в развитии проекта, предпочитая делать то, что кажется им наиболее логичным.[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 2 django/README (неопр.). GitHub. Дата обращения: 8 сентября 2020. Архивировано 30 апреля 2020 года.
- Django FAQ (неопр.). Дата обращения: 27 марта 2019.
- Release 5.2.6 — 2025.
- django/LICENSE (неопр.). GitHub. Дата обращения: 8 сентября 2020. Архивировано 12 февраля 2021 года.
- What does «Django» mean, and how do you pronounce it? (неопр.) Дата обращения: 14 мая 2009. Архивировано 10 сентября 2017 года.
- Django FAQ about MVC in Django (неопр.). Дата обращения: 14 мая 2009. Архивировано 10 сентября 2017 года.
- Маниакальный Веблог (Блог Ивана Сагалаева) (неопр.). Дата обращения: 27 августа 2020. Архивировано 30 октября 2020 года.
- 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 (неопр.). Дата обращения: 27 августа 2020. Архивировано 9 сентября 2020 года.
- Django FAQ (неопр.). Дата обращения: 14 мая 2009. Архивировано 10 сентября 2017 года.
- DjangoBook. Глава 5. Работа с базой данных: Модели (неопр.). Дата обращения: 27 августа 2020. Архивировано 30 сентября 2020 года.
- DjangoBook. Глава 6. Интерфейс администратора Django (неопр.). Дата обращения: 27 августа 2020. Архивировано 26 сентября 2020 года.
- DjangoBook. Глава 3. Основы динамических страниц (неопр.). Дата обращения: 27 августа 2020. Архивировано 22 октября 2020 года.
- DjangoBook. Глава 10. Расширения для шаблонной системы (неопр.). Дата обращения: 27 августа 2020. Архивировано 30 сентября 2020 года.
- DjangoBook. Глава 13. Кэширование (неопр.). Дата обращения: 27 августа 2020. Архивировано 26 сентября 2020 года.
- DjangoBook. Глава 18. Интернационализация (неопр.). Дата обращения: 27 августа 2020. Архивировано 30 сентября 2020 года.
- Djangodoc.ru. Использование форм (неопр.). Дата обращения: 5 октября 2020. Архивировано 7 октября 2020 года.
- Django’s release process | Django documentation | Django (англ.). www.djangoproject.com. Дата обращения: 4 сентября 2021. Архивировано 9 октября 2021 года.
- Release notes | Django documentation | Django (англ.). www.djangoproject.com. Дата обращения: 4 сентября 2021. Архивировано 24 октября 2021 года.
- «Introducing Django 0.90» (неопр.). Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
- «Django 0.91 released» (неопр.). Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
- «Introducing Django 0.95» (неопр.). Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
- «Announcing Django 0.96!» (неопр.) Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
- «Django 1.0 released!» (неопр.) Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
- «Django 1.1 released» (неопр.). Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
- «Django 1.2 released» (неопр.). Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
- «Django 1.3 released» (неопр.). Архивировано 10 июля 2017 года.. Django weblog. Retrieved 2 February 2013.
- «Django 1.4 released» (неопр.). Архивировано 9 июня 2017 года.. Django weblog. Retrieved 2 February 2013.
- «Django 1.5 released» (неопр.). Архивировано 10 июля 2017 года. Django weblog. Retrieved 27 February 2013.
- «Django 1.6 released» (неопр.). Архивировано 10 июля 2017 года. Django weblog. Retrieved 6 November 2013.
- «Django 1.7 released» (неопр.). Архивировано 10 июля 2017 года. Django weblog. Retrieved 4 September 2014.
- «Django 1.8 released» (неопр.). Архивировано 10 июля 2017 года. Django weblog. Retrieved 2 April 2015.
- «Django 1.9 released» (неопр.). Архивировано 7 июня 2017 года. Django weblog. Retrieved 1 December 2015.
- «Django 1.10 released» (неопр.). Архивировано 17 июня 2017 года. Django weblog. Retrieved 1 August 2016.
- «Django 1.11 released» (неопр.). Архивировано 10 июня 2017 года. Django weblog. Retrieved 4 April 2017.
- «Django 2.0 released» (неопр.). Архивировано 1 апреля 2019 года. Django weblog. Retrieved 3 December 2017.
- «Django 2.1 released» (неопр.). Архивировано 1 апреля 2019 года. Django weblog. Retrieved 2 August 2018.
- How to get Django (неопр.). Архивировано 30 июня 2017 года. Retrieved 2 August 2018.
- Open-Source Django projects (неопр.). Дата обращения: 27 августа 2020. Архивировано 2 июля 2020 года.
- Pricing | OpenShift by Red Hat (неопр.). Дата обращения: 6 января 2013. Архивировано 23 января 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 (неопр.). Дата обращения: 10 мая 2018. Архивировано 10 мая 2018 года.
- Deploying an existing Django project on PythonAnywhere (неопр.). Дата обращения: 25 апреля 2017. Архивировано 26 апреля 2017 года.
- Google App Engine Python (неопр.). Дата обращения: 4 января 2013. Архивировано 20 января 2013 года.
- Third-party Libraries in Python 2.7 - Google App Engine — Google Developers (неопр.). Дата обращения: 6 января 2013. Архивировано 16 января 2013 года.
- Google cloud-sql (неопр.). Дата обращения: 4 января 2013. Архивировано 15 января 2013 года.
- Django Support - Google App Engine — Google Developers (неопр.). Дата обращения: 6 января 2013. Архивировано 11 августа 2014 года.
- Django-nonrel (неопр.) (недоступная ссылка — история).
- django-dbindexer (неопр.). Дата обращения: 27 августа 2020. Архивировано из оригинала 9 июля 2020 года.
Литература
Ссылки
|
|