Статьи Новости Контакты
PHP (14), Perl (0), JavaScript (4), Ajax (8)

22.05.2008
Александр Козлов

Django

прогрессивные djунгли

Итак, Django ("Джанго") – это свободный программный каркас (фреймворк) для создания веб-приложений, написанный на Python. Фреймворк примерно соответствует архитектуре MVC ("модель — вид — контроллер"), которой, к примеру, придерживается и Ruby on Rails.

Несмотря на то что архитектура "Джанго" похожа на «модель — вид — контроллер», его разработчики заявляют, что не обязуются строго придерживаться какой-то методологии, предпочитая делать то, что кажется правильным именно им. По этой причине то, что называется «контроллер» в классической модели MVC, в "Джанго" называется «вид», а то, что было бы «видом», называется «шаблон». Таким образом, стандартная аббревиатура MVC для "Джанго" преобразовалась в MTV. И никакой рекламы музыкального канала здесь нет.

Каждая отдельная часть веб-приложения, созданного с помощью "Джанго", имеет одно назначение и может быть изменено независимо, т. е. без влияния на остальные компоненты
Фреймворк изначально создавался для управления несколькими новостными сайтами World Company, базирующейся в Лоуренсе, штат Канзас, США, и был выпущен под BSD лицензией в июле 2005 года. Разработчики: Эдриан Головатый (Adrian Holovaty), Саймон Виллисон (Simon Willison), Джекоб Каплан-Мосс (Jacob Kaplan-Moss) и Вилсон Майнер (Wilson Miner). Именно эти четверо программистов в свое время написали столь популярный ныне фреймворк для управления тремя новостными сайтами. Сам фреймворк назван в честь известного джазового гитариста Джанго Рейнхарда.

Изначальное происхождение "Джанго" как средства управления новостной средой очень сильно заметно в его архитектуре – он предоставляет ряд средств, которые помогают в быстрой разработке веб-сайтов информационного характера. К примеру: разработчику не требуется создавать контроллеры и страницы для административной части сайта, в "Джанго" присутствует встроенное приложение для управления содержимым, которое можно легко включить в любой сайт, сделанный на "Джанго", и которое может управлять сразу несколькими ресурсами с одного сервера. Это административное приложение умеет создавать, изменять и удалять любые объекты наполнения ресурса, протоколируя все действия, а также предоставляет интерфейс для управления пользователями и группами (с назначением прав). Кроме этого, в "Джанго" также включены приложения системы комментариев, синдикации в форматах RSS/Atom, перенаправления URL и статических страниц, которыми можно управлять без необходимости написания контроллеров и представления.

Это, конечно же, далеко не полный список возможностей "Джанго", который также включает в себя следующие возможности:
 — Слой ORM (Object-relational mapping — объектно-реляционная проекция), технологии программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая, таким образом, виртуальную объектную базу данных.
 — Подключаемая архитектура приложений, которые можно устанавливать на любые Django-based-ресурсы.
 — Встроенная система generic views — шаблонных функций контроллеров, которые избавляют разработчика от необходимости их написания для часто используемых задач.
 — Полноценный API доступа к базе данных с поддержкой транзакций.
 — Авторизация пользователей с возможностью подключения внешних модулей авторизации, таких как распространенный ныне OpenID или LDAP.
 — Расширяемая система шаблонов с тегами и наследованием.
 — Диспетчер URL на регулярных выражениях.
 — Система фильтров для построения дополнительных обработчиков запросов, как например, включенные в дистрибутив фильтры кеширования, сжатия, нормализации URL и поддержки анонимных сессий, – все это называется middleware.
 — Библиотека Newforms для работы с формами: наследование, построение форм по существующей модели БД.
 — Интернационализация и локализация приложений.
 — Встроенный административный интерфейс с переводами на многие языки, в том числе и русский.
 — Встроенная автоматическая документация по тегам шаблонов и моделям данных, доступная через административное приложение.

Для того чтобы "Джанго" мог применяться на сервере – последний должен соответствовать некоторым требованиям. Изначально фреймворк проектировался для работы под управлением Apache с модулем mod python, а также с использованием PostgreSQL в качестве базы данных, однако к настоящему моменту с включением поддержки WSGI он может работать под управлением FastCGI, mod_wsgi или SCGI на Apache и других серверах типа lighttpd или nginx. Используемые СУБД: MySQL, SQLite и Oracle, также в разработке находится и библиотека для Microsoft SQL Server. Кроме того, в самом "Джанго" есть простейший встроенный веб-сервер, предназначенный специально для разработки.

"Джанго" является видным представителем нового поколения сред веб-разработки
Основная причина того, что многие сравнивают "Джанго" с Ruby on Rails, заключается в их идеологическом сходстве. Основные принципы "Джанго" следующие:
 — Принцип DRY: Don’t Repeat Yourself (не повторяйтесь) означает, что нужно стараться исключать дублирование уже введенного в систему знания. Самый простой пример: если был описан тип поля в таблице, то не нужно писать исключительную по творческому заряду вещь:

if тип поля EMail:
проверить, что передан EMail
elif тип поля Integer:
проверить, что передан Integer
...

Фреймворк прилагает максимум усилий для того, чтобы из описанной один раз информации выудить максимум возможного сервиса:

 — Так называемая «слабая связанность» — разделение фреймворка на максимально независимые компоненты. Шаблоны, обработчики и модель почти не завязаны друг на друга: модель не знает, что такое HTTP-запрос, а из шаблона нельзя случайно изменить данные.
 — Отказ от привязывания шаблонов к языку программирования. Когда шаблон представляет собой ядовитую смесь HTML и серверного языка, очень быстро это приводит к тому, что в шаблон проникает огромное количество логики, которой нужно быть на уровне приложения. Это, в свою очередь, ведет к тому, что все это очень сложно поддерживать. В "Джанго" язык шаблона никак не связан с самим Питоном, а шаблонная логика намеренно ограничена. К примеру: в операторе {% if %} можно проверить только логическую истинность объекта, а произвольное условие типа «равна ли длина списка пяти» не допускается. Еще одним свойством шаблонной системы является безопасность – можно обращаться не к любым методам, а только к тем, которые не меняют сами объекты. По этой причине шаблон можно безбоязненно отдавать на редактирование – все-равно ничего не сломают.
 — Красивый URL. Это одна из многих вещей, про которую «все знают», что это хорошо, однако обычно откладывают, «потому что на функциональность сайта это не влияет», а руководство требует новых возможностей от продукта и красота мало кого волнует. В "Джанго" невозможно породить конструкции типа: «index.php?func=user&subfunc=add&PHPSESSIONID=…» Имеется файл, в котором просто пишется список всех видов URL, которые привязываются к своим обрабатывающим функциям. Причем изменяемые части URL (id и тому подобные) передаются в обработчик в виде обычных параметров функции.

Однако центральная идея фреймворка, как и в Ruby, — это быстрая разработка с минимальным количеством кода. Все следует одной цели – большую часть времени программист должен заниматься не настройкой фреймворка, а написанием кода приложения.
Для достижения этого многие вещи делаются без лишних указаний в настройках, а «по соглашению». То есть, если нужно при генерации схемы БД заполнить ее текстовыми данными, нужно просто оставить в проекте файл оговоренного названия с SQL-скриптом, нигде не нужно прописывать выполнение этого кода.

Среда предоставляет инфраструктуру разработки для ваших приложений, вы сосредотачиваетесь на создании явного, хорошо поддерживаемого кода без необходимости каждый раз изобретать колесо. Вкратце — этим и занимается "Джанго"
Кроме того, "Джанго" поставляется с большим количеством уже написанных вещей, которые в том или ином виде присутствуют в любом веб-приложении:
 — Сессии. Достаточно подключить в приложение нужный модуль, и в каждом запросе появится request.session, в которую можно класть любые данные, естественно, разные для каждого юзера.
 — Авторизация, поддерживающая: регистрацию, авторизацию, систему прав на объекты вашей модели данных, генерацию паролей, рассылку сообщений по e-mail.
 — Кеширование. Для того чтобы не обращаться каждый раз в базу, когда требуются редко меняющиеся данные, вывод можно закешировать. Хоть целиком весь сайт, хоть отдельные страницы, хоть вообще произвольные данные. Причем у системы кеша несколько вариантов, где его хранить: в памяти, в memcached, в директории на диске, в таблице базы данных и так далее.
 — И многое другое: синдикация, GZip, conditional get, редиректы, статические инфостраницы, валидация форм и многое-многое-многое другое.
Причем неоспоримым преимуществом является еще и то, что все эти базовые вещи легко расширяются. Если нужны нестандартные поля для таблицы пользователей, с помощью некоторого подобия наследования можно переделать стандартную таблицу и система авторизации будет ее использовать. Исходники всего фреймворка открыты, и можно в точности увидеть, как все работает, поменять и расширить.

Однако самой презентационной особенностью "Джанго", столь сильно ускоряющей разработку ресурсов, является административная панель. Она уже готова к использованию, и разработчику не придется корпеть над ее «обустройством». Нужно лишь указать, какие объекты вы хотите видеть в интерфейсе, и все – "Джанго" автоматически формирует интерфейс, который работает даже лучше, чем выглядит.
"Джанго" использует возможности Python по полной. К примеру, возможность по объекту узнать всю внутреннюю структуру класса, его методы и свойства очень полезна для реализации основного принципа DRY. Именно из-за этого можно строить модель данных по описанным классам и обвешивать объекты этих классов разными полезными методами. Если вы определили класс person с атрибутом picture, в котором лежит фотография человека, то "Джанго" автоматически сделает ему удобные методы типа: get_picture_url() и get_picture_filename().
Однако "Джанго" пока еще находится в стадии активной разработки и все еще не дожил до версии 1.0, хотя разработчики уверяют, что 90% кода является стабильным. Однако это означает, что нужно быть готовым к тому, что разработчики сломают старые API и подходы в пользу новых. Однако изменения не усиливают головной боли, так как они всегда маленькие и логичные. Но если для вас как разработчика на первом месте стоит стабильность кода, то пока еще рано переводить все сервисы на "Джанго".




Скоро на сайте

  • Wordpress

    Серия статей о плагинах к движку WordPrress
  • AJAX

    Проекты и продукты, ориентированные на AJAX
  • Новые сервисы Google

    Обзор новых сервисов Google
 

Copyright © 2003—2018 Все права защищены

При использовании материалов сайта ссылка на hostinfo.ru обязательна

  • хостинг от .masterhost
  • Rambler's Top100