# 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**).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ivanovskiy999.gitbook.io/django/1.-vvedenie-v-django/o-django.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
