django почему так называется
Django
русский и ещё 66 языков
1.4.3 (17 октября 2012)
Django (Джанго) — свободный фреймворк для веб-приложений на языке Python. Изначально проект был создан для управления новостными сайтами LJWorld.com, lawrence.com и KUsports.com, принадлежащими компании The World Company (Лоуренс, Канзас (en), США).
Сайт на Django строится из одного или нескольких приложений, которые рекомендуется делать отчуждаемыми и подключаемыми. Это одно из существенных архитектурных отличий этого фреймворка от некоторых других (например, Ruby on Rails).
Также в отличие от других фреймворков обработчики URL в Django конфигурируются явно при помощи регулярных выражений, а не выводятся автоматически из структуры моделей контроллеров.
Для работы с базой данных Django использует собственный ORM, в котором модель данных описывается классами Python, и по ней генерируется схема базы данных. [2]
Содержание
Разработчики
Разработчики заявляют, что не обязуются строго придерживаться какой бы то ни было методологии в развитии проекта, предпочитая делать то, что кажется им наиболее логичным. [3]
Архитектура
Архитектура Django похожа на «Модель-Представление-Контроллер» (MVC). Контроллер классической модели MVC примерно соответствует уровню, который в Django называется Представление (англ. View ), а презентационная логика Представления реализуется в Django уровнем Шаблонов (англ. Template ). Из-за этого уровневую архитектуру Django часто называют «Модель-Шаблон-Представление» (MTV).
Первоначальная разработка Django, как средства для работы новостных ресурсов, достаточно сильно отразилась на его архитектуре: он предоставляет ряд средств, которые помогают в быстрой разработке веб-сайтов информационного характера. Так, например, разработчику не требуется создавать контроллеры и страницы для административной части сайта, в Django есть встроенное приложение для управления содержимым, которое можно включить в любой сайт, сделанный на Django, и которое может управлять сразу несколькими сайтами на одном сервере. Административное приложение позволяет создавать, изменять и удалять любые объекты наполнения сайта, протоколируя все совершённые действия, и предоставляет интерфейс для управления пользователями и группам (с пообъектным назначением прав).
В дистрибутив Django также включены приложения для системы комментариев, синдикации RSS и Atom, «статических страниц» (которыми можно управлять без необходимости писать контроллеры и представления), перенаправления URL и другое.
Возможности
Некоторые возможности Django:
Некоторые компоненты фреймворка между собой связаны слабо, поэтому их можно достаточно просто заменять на аналогичные. Например, вместо встроенных шаблонов можно использовать Mako или Jinja.
В то же время заменять ряд компонентов (например, ORM) довольно сложно.
Решения
Конфигурация сервера
Django проектировался для работы под управлением Apache с модулем mod python и с использованием PostgreSQL в качестве базы данных.
С включением поддержки WSGI, Django может работать под управлением FastCGI, mod wsgi или SCGI на Apache и других серверах (lighttpd, nginx,…).
В настоящее время, помимо базы данных PostgreSQL, Django может работать с другими СУБД: MySQL, SQLite, Microsoft SQL Server, DB2, Firebird, SQL Anywhere и Oracle.
В составе Django присутствует собственный веб-сервер для разработки. Сервер автоматически определяет изменения в файлах исходного кода проекта и перезапускается, что ускоряет процесс разработки на Python. Но при этом он работает в однопоточном режиме и пригоден только для процесса разработки и отладки приложения.
Django на хостинге Google
Платформа Google App Engine имеет в своём составе ограниченную версию Django. [11]
Существует версия Django-nonrel адаптированная для работы с не реляционными хранилищами данных, которая позволяет полноценно (насколько это возможно технически) использовать Django на платформе Google App Engine. А подключаемое приложение django-dbindexer позволяет даже эмулировать JOIN в нереляционных хранилищах данных.
Что бы я хотел знать когда начинал изучать Django? — очень общий взгляд
Здесь на Хабре много различных инструкций по использованию Django. Эти инструкции часто включают много кода и представляют последовательность шагов, которые нужно сделать, чтобы создать проект.
Когда я начинал изучать Django и Wagtail по таким инструкциям, меня часто смущало, что пара команд создает кучу непонятных файлов (особенно на самом старте). Последующее описание этих файлов в инструкциях содержало слишком много деталей, которые трудно было усвоить за раз.
В этом посте я бы хотел посмотреть на Django с очень «философского вида» — минимум кода, максимум общих фактов. Думаю, что такой взгляд поможет тем, кто хочет начать изучать Django но теряется на старте.
Хочу также сказать, что не являюсь профессионалом по части веб-программирования — я в этой области скорее любитель, которого интересуют исключительно личные проекты — один из них сайт по расшифровке данных ДНК тестов https://ru.bezoder.com — написан на Wagtail.
Сначала давайте вспомним, что сайт в интернете это просто программа, которая, возможно, работает почти на таком же компьютере, что находится перед вами.
Ваш компьютер (телефон и т.п.) посылает какой-то запрос к чужому компьютеру в интернет, тот его обрабатывает и отвечает. При обработке чужой компьютер, возможно, делает запрос или производит запись в базу данных. Теперь представим, что необходимо запрограммировать компьютер в интернете, чтобы он правильно обрабатывал каждый запрос.
Это можно сделать вообще на каком угодно языке программирования — вы получаете запрос и на его основе что-то выполняете. Но представьте сколько может быть вариантов как запрограммировать этот компьютер — их может быть бесконечно много! Например, можно написать функцию что-то вроде:
Думаю, понятно, что это был бы ужасный вариант программирования.
Нам нужно сделать все так, чтобы код был читаемым, безопасным, легко дополняемым, использовал какие-то возможности языка, на котором написан…
С таким набором задач нужно придумать какую-то концепцию.
Концепция Django
Django предлагает все разделить на «слои«. Слои отвечают за разные составляющие вашей программы. Между слоями есть связь, но она не затрудняет разработку каждого слоя изолированно (без большого внимания к другим слоям) — в Django это называется loose coupling.
Вот несколько важных слоев Django:
Тут я немного подробнее остановлюсь на слоях Модели, Виды и Шаблоны.
Слой модели
Как видите, в базе каждая строка это запись, относящаяся к пользователю сайта. В строке есть данные различного типа — в нашем случае числа и текст.
Распространенным языком баз данных является SQL — определенными командами вы можете создавать новые таблицы в базе или вносить и получать данные в и из существующих таблиц.
У SQL есть уязвимости — подробнее. Вкратце — если определенным образом расставить кавычки и точки с запятой в данных, которые отправляются в SQL команду, часть этих данных может быть интерпретирована как составляющая SQL команды.
Django берет всю головную боль, связанную с проблемами SQL на себя — вам даже не надо знать SQL, чтобы пользоваться Django, от вас нужен только python — Django сам сформирует SQL команды для создания таблиц, поиска и записи данных в таблицы и все это будет безопасно.
Идея Django в том, что классы на python повторяют структуру таблиц вашей базы данных.
То есть, для таблицы выше я могу создать класс в python что-то вроде:
но как связать такой класс с базой данных? Вот тут начинается магия Django:
Вы просто используете django.db.models.Model чтобы создать класс, далее каждое поле в вашем классе это также поле, взятое из django.db.models. В моем случае поле name это текстовое поле CharField, поле karma это число float. Список всех полей (Field types) есть в официальной документации.
У каждого поля есть опции (Field options) — в коде выше опция это max_length = 20. Опции зависят от полей, которые вы создаете в базе — например, max_length = 20 это максимальная длина в символах поля name в базе. В документации по ссылке выше также описаны опции для всех полей.
На основе этого кода Django сам создаст таблицу в базе данных и то, что я назвал полями в классе будут столбцами в этой таблице. Django дает вам также удобные команды в python как получать или записывать значения в базу данных. Все делается с помощью методов models.Model а также абстракции «Manager», отвечающей в Django за коммуникацию с базой данных (в данном посте я эти абстракции детально не рассматриваю). Например, CustomUser.objects.filter(name=«Михаил») вернет всех пользователей с именем «Михаил».
Такая связь между строками в базе данных и объектами (экземплярами, инстансами) в Python называется Object-relational mapping — в нашем случае Django-ORM.
А наши модели повторяют структуру базы данных и при этом являются классами в Python. Это значит, что к моделям (классы в Python) можно добавить методы. Например, продолжая логику сайта Хабр, я могу добавить метод для изменения кармы:
Тут other — это другой пользователь. Как вы знаете здесь определенная логика добавления кармы. Всю эту логику я могу, например, создать в указанном методе.
В Django вы думаете какие таблицы хотите создать в своей базе и потом просто создаете классы python по примеру выше.
Слой виды
Следующим важным, на мой взгляд, слоем является слой видов (views). Ваши модели это некоторые абстракции, с которыми вам удобно работать или они интуитивно понятны. Но, когда вы хотите что-то показать пользователям, то, возможно, вас будут интересовать иные абстракции.
Например, вы создали три модели в Django: CustomUser, Article и Advertisement с разными полями. Модель Article это статья сайта, Advertisement — это реклама, которую вы показываете на сайте, CustomUser — зарегистрированный пользователь сайта.
Когда вы захотите создать вебстраницу со статьей, то вам понадобятся данные сразу из нескольких ваших моделей — разумеется вы хотите показать все поля в самой статье (название, содержание и т.д.), вы, скорее всего, также хотите показать какую-то рекламу рядом с этой статьей. Причем реклама зависит не от содержания статьи а от поведения пользователя CustomUser. При таком подходе будет нужна какая-то логика — как собирать данные. Так, слой view в данном случае и будет подходящим местом для этой логики. Тут можно собрать все данные, которые будут относиться к тому, что вы хотите показать.
Есть два типа видов view в Django — функциональный и классовый.
Функциональный вид это просто Python функция с аргументом request — это запрос к вашему сайту. В нем содержится информация о пользователе, типе запроса и многом другом. На основе этой информации вы формируете ответ и возвращаете его в своей функции.
Еще один тип view — классовый. Он позволяет создавать виды не на основе функций, а виды как экземпляры классов. Тут Django предоставляет также кучу всяких облегчающих жизнь классов и функций. Предположим, вы хотите создать вид на основе статьи Article:
Классовый вид на основе DetailView автоматически соберет всю информацию модели Article и затем отправит ее в следующий слой Django:
Слой шаблоны
В коде выше template_name это переменная для названия html шаблона, который будет использован для формирования веб страницы, которая и будет показана пользователю. Вот пример кода из такого шаблона:
Django почему так называется
Прежде чем мы погрузимся в изучение кода, следует уделить немного времени истории развития Django. Мы отметили, что мы будем рассказывать вам как всё работает без вспомогательных средств, чтобы помочь вам разобраться с внутренней кухней процессов. Аналогично, будет полезно для понимания того, почему была создана среда Django, почему Django работает именно так, а не иначе.
Если у вас есть достаточный опыт разработки приложений, возможно вы сталкивались с проблемами, показанными на примере CGI, который мы продемонстрировали ранее. Классический процесс разработки приложения выглядит так:
Создать приложение с нуля.
Создать другое приложение с нуля.
Реализовать работу первого приложения со вторым.
Переработать код так, чтобы оба приложения использовали общие функции.
Повторить шаги 2-4 несколько раз.
Вы изобрели среду разработки.
Именно так и была создана Django!
Замечание
Рекомендуем ознакомиться с:
Летом 2005, развив эту среду до такого состояния, что она поддерживала большинство сайтов World Online, команда разработчиков, включая Якоба Каплан-Мосса (Jacob Kaplan-Moss), решила выпустить среду в виде программного обеспечения с открытым исходным кодом. Они выпустили его в июле 2005 под именем Django в честь джазового гитариста Джанго Рэйнхарда (Django Reinhardt).
Эта история уместна, потому что помогает объяснить два ключевых аспекта. Первый аспект — основное назначение Django. Так как Django родился в новостной среде, он предоставляет некоторые средства (такие как административный интерфейс, описанные в главе « Интерфейс администратора Django » ), которые хорошо подойдут для контент-ориентированных сайтов, таких как Amazon.com, craigslist.org и washingtonpost.com, которые предоставляют динамическую информацию из базы данных. Существует разница между быть особенно эффективным в чём-то и быть неэффективным в другом.
Вторым аспектом является то, как происхождение Django сформировало культуру его сообщества открытого исходного кода. Так как Django был получен из реального кода, а не был академической разработкой или коммерческим продуктом, он полностью сфокусирован на решение проблем разработки, с которыми сталкивались и продолжают сталкиваться его авторы. В результате, Django постоянно совершенствуется. Основатели среды имеют свой интерес в том, чтобы Django экономил их время, создавал приложения лёгкие в обслуживании и хорошо работал под нагрузкой. При отсутствии других причин, разработчики мотивируются своими собственными эгоистичными желаниями сэкономить своё время и наслаждаться своей работой.
Как я изучал(изучаю фреймворк Django). Личный опыт.
Что нужно знать (необходимый МИНИМУМ) относительно Python:
-Ввод и вывод данных
-Функции и рекурсия
-Работа с модулями и функциями (создание, импортирование, вызов. )
-Основы регулярных выражений
В настоящее время, актуальной версией является Django 2.0. Но я советую начать изучение с версии 1.11. Почему именно так:
1. По Django 2.0 мало различных материалов на русском языке. Для 1.11 материалов достаточно.
2. Django 2.0 и 1.11 очень похожи, но в 2.0 сделали упрощённый синтаксис маршрутизации URL. Из-за этого могут возникнуть сложности на начальном этапе, если пытаться обучаться по материалам основанным на 1.11 версии.
3. Большинство готовых приложений и расширений до сих пор поддерживают только 1.11 версию и не поддерживают 2.
4. Расширенная поддержка версии 1.11LTS заканчивается в 2020 году, а 2.2LTS пока не видно.
Итак, расскажу как изучал я. Может быть кому-нибудь покажется полезной данная информация.
1. Проходим туториал на Django-girls.
Шаг за шагом копипастим и пытаемся понять что вообще происходит.
-Основы работы в консоли Linux
-Создание и работа в виртуальном окружении Python.
-Основы основ Django (urls, модели, шаблоны, views)
Альтернативный вариант (более короткий):
Версия 1.9 а не 1.11, но в этом нет ничего страшного.
2. Цикл лекций «Web-технологии. Разработка на DJANGO» от Mail.ru
Если не интересны основы-основ про web-разработку (уже знаете или задача быстро освоить Django), тогда начинаем смотреть с «9. Web-технологии. MVC фреймворки | Технострим» и дальше.
-Архитектуре и принципам взаимодействия компонентов, основам Django
3. Книга «Django: практика создания Web-сайтов на Python» Владимир Александрович Дронов:
ссылка: сами кУпите или найдёте.
Читаем главы с 1 по 7. Главу 2 опционально можете пропустить, если знакомы с основами Python.
-Пониманию основ MVC
-Через примеры кода начнет приходить понимание, как все работает.
-Через копипасту проекта в общем виде начали понимать как все устроено и работает
-Через лекции MAIL.ru узнали как работают web-приложения, как выглядит архитектура типичного web-приложения(взаимодействие бекенда-фронтэнда, работа протоколов, общая архитектура), узнали место Django в этой архитектуре
-Через книгу более детально познакомились с паттерном проектирования MVC (что такое модель, контроллер, представление), через примеры кода начали понимать как это может работать.
II. ПРОДОЛЖЕНИЕ НАЧАЛА(продолжаем «копипастить»):
1. Ищем курс «iTBursa Python&Django». Продажу курса уже закрыли (скорее всего видимо потому, что курс попал в открытый доступ). В курсе есть основы Python и Django. Плюсом идут основы: html/css, bootstrap web, http, databases, linux, shell, git/github, nginx, deployment.
Продолжаем копипастить уже по этому курсу, но теперь самостоятельно выполняем «Контрольные задания»(или не выполняем). В принципе этот курс мог бы заменить все вышеперечисленное. Но так как каждый человек воспринимает информацию по разному, ИМХО лучше усвоится информация, полученная из разных (по типу и виду подачи информации) источников.
Дополнительно: курс itvdn-Django от Антона Мазуна
2. Продолжаем читать и перечитывать Дронова
3. Изучаем официальную документацию или перевод документации 1.9(djbook.ru)
-На этом этапе уже должно быть освоено достаточное количество материалов для написания своего собственного приложения.
II. КОНЦА НЕ ВИДНО(создаём свой собственный проект):
Собственно если все делали правильно, на этом этапе должны быть все необходимые знания для реализации собственного проекта. По сути, можно сосредоточиться только на Джанго, а фронтэнд слепить из кусков Bootstrap.
Теперь отправляемся в свободное плавание на просторы интернета. Теперь уже сами ищем статьи, видео, гайды, бестпрактис. Продолжаем читать Дронова и переходим на актуальную версию Django 2.x
Дополнительно можно начать читать:
-Django подробное руководство. Адриан Головатый. Джейкоб Каплан-Мосс. Книга очень старая (2010), многое изменилось, но общие принципы остались те же.
-Tango with Django. Многие советуют эту книгу.
-Web Development with Django cookbook
Извиняюсь за возможные орфографические, и в особенности, за пунктуационные ошибки.
Откуда появились названия Python, Java и Django или как метафоры мешают понимать технологии
В издательстве «Альпина Паблишер» вышла книга «Искусственный интеллект. Пределы возможного» Мередит Бпруссард, которая раньше работала разработчиком в AT&T Bell Labs и MIT Media Lab. Автор в книге выступает против техношовинизма и социальных иллюзий о спасительной роли технологий. Spark публикует отрывок о том, какую роль в этих иллюзиях играют термины.
Проблема терминов не нова. Язык эволюционирует вместе с наукой. Например, в биологии клетки называются так, а не иначе, поскольку Роберту Гуку, открывшему их в 1665 г., они напомнили монастырские кельи*. Проблема наименования особенно актуальна сегодня, в свете динамичного развития технологий. Нам приходится привыкать к новым компьютерным концептам и внедрять различные устройства поразительно часто. Однако всему этому создатели присваивают имена, основанные на уже существующих объектах или концептах.
Лингвистические проблемы стали появляться и по мере того, как термин «машинное обучение» становился частью популярного дискурса. Машинное обучение (ML) предполагает, что каким-то образом компьютер обзавелся субъектностью и разумом, поскольку он «учится», ведь обучение — это слово, которое применяется к разумным существам вроде людей (или частично разумным, например животным). Тем не менее информатики прекрасно понимают, что «машинное обучение» — это скорее метафора, она означает, что машина может улучшать свои показатели при решении запрограммированных, рутинных, автоматизированных задач. Это вовсе не значит, что машина каким-то образом приобретает знания, мудрость или субъектность, несмотря на все то, что подразумевает слово «обучение». Подобная лингвистическая путница лежит в основе большинства ошибочных представлений о компьютерах.
Воображение добавляет неразберихи. Ваше понимание феномена искусственного интеллекта зависит от того, каким вы видите будущее. Один из студентов Марвина Минского, Рэй Курцвейл, является сторонником теории сингулярности — гипотезы, согласно которой к 2045 г. человек интегрируется с вычислительными системами. (Курцвейл известен тем, что изобрел музыкальный синтезатор, который звучит как рояль.) Современная научная фантастика охвачена идеей сингулярности. Однажды во время интервью для конференции футуристов меня спросили о теории скрепок : «Что если бы вы изобрели машину, которая хочет делать скрепки, затем научили бы ее хотеть делать что-то другое, а потом машина создала бы множество других машин и они бы захватили мир? Это и есть сингулярность? — спросил интервьюер. — Беспокоит ли вас это?» Это забавно, хотя и бессмысленно. Машину можно просто выключить из розетки. Проблема решена. А еще это чисто гипотетическая ситуация. Она не настоящая.
Как сказал психолог Стивен Пинкер в специальном выпуске журнала IEEE Spectrum (журнала Института инженеров электротехники и электроники), посвященном сингулярности: «Нет ни единой причины верить в скорое приближение сингулярности. Тот факт, что вы можете представить будущее в собственной голове, еще не значит, что оно наступит. Вспомним о купольных городах, передвижениях на реактивных ранцах, подводных городах, зданиях высотой километр и автомобилях на ядерном топливе — все это футуристические фантазии, которые я слышал с детства, так и не ставшие реальностью. Возможность обработки огромных массивов данных непохожа на волшебную пыль, которая внезапно решит все проблемы».
* И то и другое на английском именуется cells. — Прим. ред.