# 1.1. О Django

## Что такое Django?

Django - это фреймворк для создания веб-приложений с помощью языка программирования Python.

Django был создан в 2005 году, когда веб-разработчики из газеты Lawrence Journal-World стали использовать Python в качестве языка для создания веб-сайтов. А в 2008 году вышел публичный первый релиз фреймворка. На сегодняшний день он продолжает развиваться. Так, текущей версией фреймворка на момент написания этой статьи является версия 2.0, которая вышла 3 декабря 2017 года. Ну и также постоянно выходят подверсии.

Django довольно популярен. Он используется на многих сайтах, в том числе таких, как Pinterest, PBS, Instagram, BitBucket, Washington Times, Mozilla и многих других.

Фреймворк является бесплатным. Он развивается как open source, его исходный код открыт, его можно найти репозитории на [github](https://github.com/django/django).

Фреймворк Django реализует архитектурный паттерн **Model-View-Template** или сокращенно **MVT**, который по смыслу является аналогом более распространенного паттерна **MVC** (**Model-View-Controller**).

{% hint style="info" %}
Путаница возникла в результате различных толкований MVC. В интерпретации Django «представление» описывает данные, которые будут представлены пользователю. Неважно *как* эти данные будут выглядеть, важно *какие* данные. Напротив, в MVC фреймворках предполагается, что в работу контролёра включено принятие решения, какие данные будут представлены пользователю, в то время как представление точно определяет *как* эти данные будут выглядеть, а не *какие* данные будут представлены.
{% endhint %}

Схематично мы можем представить архитектуру **MVT** в Django следующим образом:

![](https://2798293355-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MY9bJBkBnScP4OsqUPJ%2F-MYErdJCVKILxsGgLOhc%2F-MYF1kbiPomXEQA37vZ8%2Fmvt.png?alt=media\&token=dc6707db-8f16-4ebf-9222-ba4019e18843)

Основные элементы паттерна:

* **URL dispatcher** –при получение запроса на основании запрошенного адреса URL определяет, какой ресурс должен обрабатывать данный запрос.
* **View** – получает запрос, обрабатывает его и отправляет в ответ пользователю некоторый ответ. Если для обработки запроса необходимо обращение к модели и базе данных, то View взаимодействует с ними. Для создания ответа может применять Template или шаблоны. В MVC этому компоненту соответствуют контроллеры.
* **Model** – описывает данные, используемые в приложении. Отдельные классы, как правило, соответствуют таблицам в базе данных.
* **Template** – представляет логику представления в виде сгенерированной разметки html. В MVC этому компоненту соответствует View, то есть представления.

Когда к приложению приходит запрос, то **URL dispatcher** определяет, с каким ресурсом сопоставляется данный запрос и передает этот запрос выбранному ресурсу. Ресурс фактически представляет функцию или **View**, который получает запрос и определенным образом обрабатывает его. В процессе обработки **View** может обращаться к моделям и базе данных, получать из нее данные, или, наоборот, сохранять в нее данные. Результат обработки запроса отправляется обратно, и этот результат пользователь видит в своем браузере. Как правило, результат обработки запроса представляет сгенерированный html-код, для генерации которого применяются шаблоны (**Template**).
