Лучшие вопросы
Таймлайн
Чат
Перспективы

Django

свободный фреймворк для веб-приложений на языке Python Из Википедии, свободной энциклопедии

Django
Remove ads

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

Краткие факты Тип, Авторы ...

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

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

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

Remove ads

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

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

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

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

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

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

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

Remove ads

Архитектура

Суммиров вкратце
Перспектива

Архитектура 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 обеспечивает абстракцию от деталей взаимодействия с базой данных, что упрощает работу с данными и делает код более переносимым и поддерживаемым.

Thumb
Джанго Рейнхардт — музыкант, в честь которого получил название фреймворк
Remove ads

Возможности

Суммиров вкратце
Перспектива

Некоторые возможности 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.

Remove ads

Версии и хронология их выхода


Некоторые выпуски Django получают статус «релиза с долгосрочной поддержкой» (LTS)[20]. Они получают обновления по безопасности и по защите от потерь данных на гарантированный период времени, обычно от трёх лет.

Подробнее Версия, Дата ...
Remove ads

Решения

На базе 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. Но при этом он работает в однопоточном режиме и пригоден только для процесса разработки и отладки приложения.

Remove ads

Хостинг для 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 в нереляционных хранилищах данных.

Remove ads

Примечания

Литература

Ссылки

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads