Django

Поделись знанием:
Перейти к: навигация, поиск
Django
Языки интерфейса

русский и ещё 66 языков

Состояние

активное

К:Википедия:Статьи без изображений (тип: не указан)

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

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

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

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





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

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

Также Django используется в качестве веб-компонента в различных проектах, таких как Graphite — система построения графиков и наблюдения, FreeNAS — свободная реализация системы хранения и обмена файлами и др.

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

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

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

Архитектура

Архитектура Django похожа на «Модель-Представление-Контроллер» (MVC). Контроллер классической модели MVC примерно соответствует уровню, который в Django называется Представление (англ. View), а презентационная логика Представления реализуется в Django уровнем Шаблонов (англ. Template). Из-за этого уровневую архитектуру Django часто называют «Модель-Шаблон-Представление» (MTV).

Первоначальная разработка Django, как средства для работы новостных ресурсов, достаточно сильно отразилась на его архитектуре: он предоставляет ряд средств, которые помогают в быстрой разработке веб-сайтов информационного характера. Так, например, разработчику не требуется создавать контроллеры и страницы для административной части сайта, в Django есть встроенное приложение для управления содержимым, которое можно включить в любой сайт, сделанный на Django, и которое может управлять сразу несколькими сайтами на одном сервере. Административное приложение позволяет создавать, изменять и удалять любые объекты наполнения сайта, протоколируя все совершённые действия, и предоставляет интерфейс для управления пользователями и группами (с пообъектным назначением прав).

В дистрибутив Django также включены приложения для системы комментариев, синдикации RSS и Atom, «статических страниц» (которыми можно управлять без необходимости писать контроллеры и представления), перенаправления URL и другое.

Возможности

Некоторые возможности Django:

  • ORM, API доступа к БД с поддержкой транзакций[8]
  • встроенный интерфейс администратора,[9] с уже имеющимися переводами на многие языки
  • диспетчер URL на основе регулярных выражений[10]
  • расширяемая система шаблонов с тегами и наследованием[11]
  • система кеширования[12]
  • интернационализация[13]
  • подключаемая архитектура приложений, которые можно устанавливать на любые Django-сайты
  • «generic views» — шаблоны функций контроллеров
  • авторизация и аутентификация, подключение внешних модулей аутентификации: LDAP, OpenID и проч.
  • система фильтров («middleware») для построения дополнительных обработчиков запросов, как например включённые в дистрибутив фильтры для кеширования, сжатия, нормализации URL и поддержки анонимных сессий
  • библиотека для работы с формами (наследование, построение форм по существующей модели БД)
  • встроенная автоматическая документация по тегам шаблонов и моделям данных, доступная через административное приложение

Некоторые компоненты фреймворка между собой связаны слабо, поэтому их можно достаточно просто заменять на аналогичные. Например, вместо встроенных шаблонов можно использовать Mako или Jinja.

В то же время заменять ряд компонентов (например, ORM) довольно сложно.

Помимо возможностей, встроенных в ядро фреймворка, существуют пакеты, расширяющие его возможности. Возможности, предоставляемые пакетами, а также полный перечень пакетов удобно отслеживать через специальный ресурс — [www.djangopackages.com/ www.djangopackages.com].

Решения

На базе Django разработан ряд готовых решений со свободной лицензией[14], среди которых интернет-магазины, системы управления содержанием, а также более узконаправленные проекты.

Конфигурация сервера

Django проектировался для работы под управлением Apache с модулем mod python и с использованием PostgreSQL в качестве базы данных.

С включением поддержки WSGI, Django может работать под управлением FastCGI, mod_wsgi, uwsgi или SCGI на Apache и других серверах (lighttpd, nginx,…).

В настоящее время, помимо базы данных PostgreSQL, Django может работать с другими СУБД: MySQL, SQLite, Microsoft SQL Server, DB2, Firebird, SQL Anywhere и Oracle.

В составе Django присутствует собственный веб-сервер для разработки. Сервер автоматически определяет изменения в файлах исходного кода проекта и перезапускается, что ускоряет процесс разработки на Python. Но при этом он работает в однопоточном режиме и пригоден только для процесса разработки и отладки приложения.

Хостинг для Django

Django можно развернуть на PaaS-сервисе RedHat [openshift.redhat.com/community/developers/python OpenShift], в том числе и бесплатно[15][16][17][18].

Сравнительные данные по хостингу Django можно узнать на Django-wiki[19][20]

Django на хостинге Google

Google App Engine Python[21] позволяет использовать для работы любую версию Django.

Существуют некоторые особенности при работе с Django в Google App Engine Python 2.7.

  • Django ОRМ несовместим с хранилищем App Engine Datastore, который представляет собой NoSQL хранилище. Это в свою очередь делает ограниченной работу определённых функций фреймворка, в частности, встроенного административного интерфейса[22].
  • Также с Django можно работать через Google cloud-sql[23]. Это позволяет использовать все возможности фреймворка, как и при работе с обычными реляционными базами.[24]

Существует community-версия Django-nonrel[25], адаптированная для работы с нереляционными хранилищами данных, которая позволяет полноценно (насколько это возможно технически) использовать Django на платформе Google App Engine. А подключаемое приложение django-dbindexer[26] позволяет даже эмулировать JOIN в нереляционных хранилищах данных.


Напишите отзыв о статье "Django"

Примечания

  1. [docs.djangoproject.com/en/dev/faq/general/#what-does-django-mean-and-how-do-you-pronounce-it What does "Django" mean, and how do you pronounce it?]
  2. [docs.djangoproject.com/en/dev/faq/general/#django-appears-to-be-a-mvc-framework-but-you-call-the-controller-the-view-and-the-view-the-template-how-come-you-don-t-use-the-standard-names Django FAQ about MVC in Django]
  3. [softwaremaniacs.org/blog/2005/12/08/django/ Маниакальный Веблог (Блог Ивана Сагалаева)]
  4. [instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances-dozens-of What Powers Instagram: Hundreds of Instances, Dozens of Technologies - Instagram Engineering]. Проверено 6 января 2013. [www.webcitation.org/6DoGaUlLV Архивировано из первоисточника 20 января 2013].
  5. [blog.disqus.com/post/568244555/david-cramer Welcome, David Cramer | Disqus: The Official Blog]. Проверено 6 января 2013. [www.webcitation.org/6DoGbVtjL Архивировано из первоисточника 20 января 2013].
  6. [developer.mozilla.org/en-US/docs/Project:Kuma The MDN platform (Kuma) | MDN]. Проверено 6 января 2013.
  7. [docs.djangoproject.com/en/dev/faq/general/#django-appears-to-be-a-mvc-framework-but-you-call-the-controller-the-view-and-the-view-the-template-how-come-you-don-t-use-the-standard-names Django FAQ]
  8. [djbook.ru/ch05.html DjangoBook. Глава 5. Работа с базой данных: Модели]
  9. [djbook.ru/ch06.html DjangoBook. Глава 6. Интерфейс администратора Django]
  10. [djbook.ru/ch03.html DjangoBook. Глава 3. Основы динамических страниц]
  11. [djbook.ru/ch10.html DjangoBook. Глава 10. Расширения для шаблонной системы]
  12. [djbook.ru/ch13.html DjangoBook. Глава 13. Кэширование]
  13. [djbook.ru/ch18.html DjangoBook. Глава 18. Интернационализация]
  14. [code.djangoproject.com/wiki/DjangoResources#Open-SourceDjangoprojects Open-Source Django projects]
  15. [openshift.redhat.com/community/developers/pricing Pricing | OpenShift by Red Hat]. Проверено 6 января 2013.
  16. [openshift.redhat.com/community/blogs/rapid-python-and-django-app-deployment-to-the-cloud-with-a-paas Rapid Python and Django App Deployment to the Cloud with a PaaS]
  17. [github.com/openshift/openshift-diy-py27-django openshift / openshift-diy-py27-django] на github
  18. [github.com/openshift/django-example openshift / django-example] на github
  19. [freedjangohosting.com/ Free Django Hosting Free Python Django Web Hosts List]
  20. [code.djangoproject.com/wiki/DjangoFriendlyWebHosts Djangofriendly] на Jango wiki
  21. [developers.google.com/appengine/docs/python/ Google App Engine Python]
  22. [developers.google.com/appengine/docs/python/tools/libraries27#django Third-party Libraries in Python 2.7 - Google App Engine — Google Developers]. Проверено 6 января 2013.
  23. [developers.google.com/appengine/docs/python/cloud-sql/developers-guide Google cloud-sql]
  24. [developers.google.com/appengine/docs/python/cloud-sql/django?hl=en Django Support - Google App Engine — Google Developers]. Проверено 6 января 2013.
  25. [bitbucket.org/wkornewald/django-nonrel Django-nonrel]
  26. [bitbucket.org/wkornewald/django-dbindexer django-dbindexer]

Литература

  • Головатый А., Каплан-Мосс Дж. [www.symbol.ru/alphabet/749548.html Django. Подробное руководство] = Django. The definitive guide to / пер. с англ.. — СПб.: Символ-Плюс, 2010. — 560 с. — (High Tech). — ISBN 978-5-93286-187-5.
  • У. Чан, П. Биссекс, Д. Форсье. [www.symbol.ru/alphabet/666336.html Django. Разработка веб-приложений на Python] = Python Web Development with Django / пер. с англ. А. Киселёв. — СПб.: Символ-Плюс, 2009. — 456 с. — (High Tech). — ISBN 978-5-93286-167-7.

Ссылки

  • [www.djangoproject.com/ Официальный сайт Django.] (англ.)
  • [code.djangoproject.com/ Wiki и сообщения об ошибках.] (англ.)
  • [github.com/django/django Проект Django] на сайте GitHub
  • [djangobook.com/ Свободная книга о Django.] (англ.) ([djbook.ru/ русский перевод], в [snippy.ru/snippet/1872-DjangoBook_na_russkom_v_formate_ePub/ ePub]).
  • Сравнение каркасов веб-приложений

Отрывок, характеризующий Django

Вчера, на ночном привале, озябнув у потухшего огня, Пьер встал и перешел к ближайшему, лучше горящему костру. У костра, к которому он подошел, сидел Платон, укрывшись, как ризой, с головой шинелью, и рассказывал солдатам своим спорым, приятным, но слабым, болезненным голосом знакомую Пьеру историю. Было уже за полночь. Это было то время, в которое Каратаев обыкновенно оживал от лихорадочного припадка и бывал особенно оживлен. Подойдя к костру и услыхав слабый, болезненный голос Платона и увидав его ярко освещенное огнем жалкое лицо, Пьера что то неприятно кольнуло в сердце. Он испугался своей жалости к этому человеку и хотел уйти, но другого костра не было, и Пьер, стараясь не глядеть на Платона, подсел к костру.
– Что, как твое здоровье? – спросил он.
– Что здоровье? На болезнь плакаться – бог смерти не даст, – сказал Каратаев и тотчас же возвратился к начатому рассказу.
– …И вот, братец ты мой, – продолжал Платон с улыбкой на худом, бледном лице и с особенным, радостным блеском в глазах, – вот, братец ты мой…
Пьер знал эту историю давно, Каратаев раз шесть ему одному рассказывал эту историю, и всегда с особенным, радостным чувством. Но как ни хорошо знал Пьер эту историю, он теперь прислушался к ней, как к чему то новому, и тот тихий восторг, который, рассказывая, видимо, испытывал Каратаев, сообщился и Пьеру. История эта была о старом купце, благообразно и богобоязненно жившем с семьей и поехавшем однажды с товарищем, богатым купцом, к Макарью.
Остановившись на постоялом дворе, оба купца заснули, и на другой день товарищ купца был найден зарезанным и ограбленным. Окровавленный нож найден был под подушкой старого купца. Купца судили, наказали кнутом и, выдернув ноздри, – как следует по порядку, говорил Каратаев, – сослали в каторгу.
– И вот, братец ты мой (на этом месте Пьер застал рассказ Каратаева), проходит тому делу годов десять или больше того. Живет старичок на каторге. Как следовает, покоряется, худого не делает. Только у бога смерти просит. – Хорошо. И соберись они, ночным делом, каторжные то, так же вот как мы с тобой, и старичок с ними. И зашел разговор, кто за что страдает, в чем богу виноват. Стали сказывать, тот душу загубил, тот две, тот поджег, тот беглый, так ни за что. Стали старичка спрашивать: ты за что, мол, дедушка, страдаешь? Я, братцы мои миленькие, говорит, за свои да за людские грехи страдаю. А я ни душ не губил, ни чужого не брал, акромя что нищую братию оделял. Я, братцы мои миленькие, купец; и богатство большое имел. Так и так, говорит. И рассказал им, значит, как все дело было, по порядку. Я, говорит, о себе не тужу. Меня, значит, бог сыскал. Одно, говорит, мне свою старуху и деток жаль. И так то заплакал старичок. Случись в их компании тот самый человек, значит, что купца убил. Где, говорит, дедушка, было? Когда, в каком месяце? все расспросил. Заболело у него сердце. Подходит таким манером к старичку – хлоп в ноги. За меня ты, говорит, старичок, пропадаешь. Правда истинная; безвинно напрасно, говорит, ребятушки, человек этот мучится. Я, говорит, то самое дело сделал и нож тебе под голова сонному подложил. Прости, говорит, дедушка, меня ты ради Христа.
Каратаев замолчал, радостно улыбаясь, глядя на огонь, и поправил поленья.
– Старичок и говорит: бог, мол, тебя простит, а мы все, говорит, богу грешны, я за свои грехи страдаю. Сам заплакал горючьми слезьми. Что же думаешь, соколик, – все светлее и светлее сияя восторженной улыбкой, говорил Каратаев, как будто в том, что он имел теперь рассказать, заключалась главная прелесть и все значение рассказа, – что же думаешь, соколик, объявился этот убийца самый по начальству. Я, говорит, шесть душ загубил (большой злодей был), но всего мне жальче старичка этого. Пускай же он на меня не плачется. Объявился: списали, послали бумагу, как следовает. Место дальнее, пока суд да дело, пока все бумаги списали как должно, по начальствам, значит. До царя доходило. Пока что, пришел царский указ: выпустить купца, дать ему награждения, сколько там присудили. Пришла бумага, стали старичка разыскивать. Где такой старичок безвинно напрасно страдал? От царя бумага вышла. Стали искать. – Нижняя челюсть Каратаева дрогнула. – А его уж бог простил – помер. Так то, соколик, – закончил Каратаев и долго, молча улыбаясь, смотрел перед собой.
Не самый рассказ этот, но таинственный смысл его, та восторженная радость, которая сияла в лице Каратаева при этом рассказе, таинственное значение этой радости, это то смутно и радостно наполняло теперь душу Пьера.


– A vos places! [По местам!] – вдруг закричал голос.
Между пленными и конвойными произошло радостное смятение и ожидание чего то счастливого и торжественного. Со всех сторон послышались крики команды, и с левой стороны, рысью объезжая пленных, показались кавалеристы, хорошо одетые, на хороших лошадях. На всех лицах было выражение напряженности, которая бывает у людей при близости высших властей. Пленные сбились в кучу, их столкнули с дороги; конвойные построились.
– L'Empereur! L'Empereur! Le marechal! Le duc! [Император! Император! Маршал! Герцог!] – и только что проехали сытые конвойные, как прогремела карета цугом, на серых лошадях. Пьер мельком увидал спокойное, красивое, толстое и белое лицо человека в треугольной шляпе. Это был один из маршалов. Взгляд маршала обратился на крупную, заметную фигуру Пьера, и в том выражении, с которым маршал этот нахмурился и отвернул лицо, Пьеру показалось сострадание и желание скрыть его.
Генерал, который вел депо, с красным испуганным лицом, погоняя свою худую лошадь, скакал за каретой. Несколько офицеров сошлось вместе, солдаты окружили их. У всех были взволнованно напряженные лица.
– Qu'est ce qu'il a dit? Qu'est ce qu'il a dit?.. [Что он сказал? Что? Что?..] – слышал Пьер.
Во время проезда маршала пленные сбились в кучу, и Пьер увидал Каратаева, которого он не видал еще в нынешнее утро. Каратаев в своей шинельке сидел, прислонившись к березе. В лице его, кроме выражения вчерашнего радостного умиления при рассказе о безвинном страдании купца, светилось еще выражение тихой торжественности.
Каратаев смотрел на Пьера своими добрыми, круглыми глазами, подернутыми теперь слезою, и, видимо, подзывал его к себе, хотел сказать что то. Но Пьеру слишком страшно было за себя. Он сделал так, как будто не видал его взгляда, и поспешно отошел.
Когда пленные опять тронулись, Пьер оглянулся назад. Каратаев сидел на краю дороги, у березы; и два француза что то говорили над ним. Пьер не оглядывался больше. Он шел, прихрамывая, в гору.
Сзади, с того места, где сидел Каратаев, послышался выстрел. Пьер слышал явственно этот выстрел, но в то же мгновение, как он услыхал его, Пьер вспомнил, что он не кончил еще начатое перед проездом маршала вычисление о том, сколько переходов оставалось до Смоленска. И он стал считать. Два французские солдата, из которых один держал в руке снятое, дымящееся ружье, пробежали мимо Пьера. Они оба были бледны, и в выражении их лиц – один из них робко взглянул на Пьера – было что то похожее на то, что он видел в молодом солдате на казни. Пьер посмотрел на солдата и вспомнил о том, как этот солдат третьего дня сжег, высушивая на костре, свою рубаху и как смеялись над ним.
Собака завыла сзади, с того места, где сидел Каратаев. «Экая дура, о чем она воет?» – подумал Пьер.
Солдаты товарищи, шедшие рядом с Пьером, не оглядывались, так же как и он, на то место, с которого послышался выстрел и потом вой собаки; но строгое выражение лежало на всех лицах.


Депо, и пленные, и обоз маршала остановились в деревне Шамшеве. Все сбилось в кучу у костров. Пьер подошел к костру, поел жареного лошадиного мяса, лег спиной к огню и тотчас же заснул. Он спал опять тем же сном, каким он спал в Можайске после Бородина.
Опять события действительности соединялись с сновидениями, и опять кто то, сам ли он или кто другой, говорил ему мысли, и даже те же мысли, которые ему говорились в Можайске.
«Жизнь есть всё. Жизнь есть бог. Все перемещается и движется, и это движение есть бог. И пока есть жизнь, есть наслаждение самосознания божества. Любить жизнь, любить бога. Труднее и блаженнее всего любить эту жизнь в своих страданиях, в безвинности страданий».
«Каратаев» – вспомнилось Пьеру.
И вдруг Пьеру представился, как живой, давно забытый, кроткий старичок учитель, который в Швейцарии преподавал Пьеру географию. «Постой», – сказал старичок. И он показал Пьеру глобус. Глобус этот был живой, колеблющийся шар, не имеющий размеров. Вся поверхность шара состояла из капель, плотно сжатых между собой. И капли эти все двигались, перемещались и то сливались из нескольких в одну, то из одной разделялись на многие. Каждая капля стремилась разлиться, захватить наибольшее пространство, но другие, стремясь к тому же, сжимали ее, иногда уничтожали, иногда сливались с нею.
– Вот жизнь, – сказал старичок учитель.
«Как это просто и ясно, – подумал Пьер. – Как я мог не знать этого прежде».
– В середине бог, и каждая капля стремится расшириться, чтобы в наибольших размерах отражать его. И растет, сливается, и сжимается, и уничтожается на поверхности, уходит в глубину и опять всплывает. Вот он, Каратаев, вот разлился и исчез. – Vous avez compris, mon enfant, [Понимаешь ты.] – сказал учитель.
– Vous avez compris, sacre nom, [Понимаешь ты, черт тебя дери.] – закричал голос, и Пьер проснулся.
Он приподнялся и сел. У костра, присев на корточках, сидел француз, только что оттолкнувший русского солдата, и жарил надетое на шомпол мясо. Жилистые, засученные, обросшие волосами, красные руки с короткими пальцами ловко поворачивали шомпол. Коричневое мрачное лицо с насупленными бровями ясно виднелось в свете угольев.