2005 год. В мире технологий появляется Django - фреймворк, который обещал изменить всё. Созданный двумя разработчиками в Канзасе, он предлагал простоту, мощь и скорость. Модель, шаблон, представление - три слова, которые одновременно вдохновляли и пугали новичков. Пока одни с его помощью строили шедевры веб-разработки, другие не могли понять, почему их сайт не грузится. Но одно было ясно: с этого момента мир уже никогда не станет прежним.

Что такое Django?
Ладно-ладно, Django - что это еще за очередная балалайка? А это, вообще-то, один из самых популярных и мощных фреймворков для создания веб-приложений на Python. И сейчас мы расскажем, почему от настолько крут.
Итак, Django — это фреймворк. А, что это вообще значит? Представь, что ты строишь дом. Ты можешь пойти в лес, начать рубить деревья, строгать доски, мастерить кирпичи… но это долго и сложно. Лучше прийти на стройплощадку, где уже есть куча готовых инструментов, материалов и заготовок.
Фреймворк — это и есть такая стройплощадка для веб-разработки. Он даёт тебе готовый каркас и набор инструментов, чтобы ты не изобретал велосипед заново.
Нужно добавить на сайт регистрацию пользователей? Лови. Настроить базулю данных? На здоровье. Разобраться с формами, безопасностью или админкой? Да вот оно все, тут!
У Django даже есть своя философия и она гласит «batteries included», что переводится как «батарейки включены». Другими словами, тебе не нужно бегать по магазину и докупать нужные детали — всё поставляется сразу в комплекте. Как будто ты купил конструктор с уже вложенными в него батарейками: вскрыл коробку и вперёд, можно играть, а точнее, программировать.

Django придумали ребята, которые работали над новостным сайтом. Им нужно было быстро делать новые фичи и они создали фреймворк, который ускорял работу, и со временем Django стал стандартом среди многих разработчиков.
Давай представим, что мы хотим сделать сайт с обзорами на шаурму. Почему бы и нет? Хочешь поделиться мнением о вкусной шАве в твоём городе — вот тебе повод для проекта.
Для начала тебе нужен сам установленный Python и менеджер пакетов pip, для установки джанго. Нужно ввести в терминале такую команду и у тебя появится свой личный ковбой-помощник:

pip install django
В Django все начинается с создания проекта, при помощи такой команды.

django-admin startproject shawarma_reviews
Она создаст создаст скелет проекта, а именно папку указанным именем (shawarma_reviews) внутри которой будут файлы настроек и управляющие скрипты. Это базовый каркас нашего сайта.
Крутые штуки начинаются уже тут. Мы можем запустить локальный сервер, который есть в комплекте чтобы проверить, что всё работает.

python manage.py runserver
Если открыв браузере локалхОст (http://127.0.0.1:8000) ты увидишь стартовую страничку Django, то значит все работаетю
Поздравляем, теперь ты джанго девелопер! Ладно, пока нет.
В Django проекты разбивают на приложения, они же app. Приложение это просто логически обособленная часть проекта. Для обзоров на шаурму можно сделать приложение под названием reviews:

python manage.py startapp reviews
Теперь в новой папке reviews есть файлы (models.py, views.py, apps.py) и другие, в которых будем описывать логику нашего приложения.
Тут стоит сказать Django использует архитектуру MVT — Model - Template - View. И не, это не MTV где ты смотрел тачку на прокачку.
Это то как мы логические разделяем приложение на несколько частей, чтобы с ними было удобно независимо работать. Мы говорим, что вот эта часть кода работает только с базой данных, и больше ничего, а эта часть выполняет всю логику, но сама в базу не ходит, и так далее.
В MVT есть Model, она же Модель, которая отвечает за работу с базой данных. Представь это как хранителя склада, который знает, где лежат твои данные и как к ним обратиться.
Далее есть Template, он же Шаблон, ****который отвечает за то, как данные выглядят для пользователя. Это как дизайнер интерьера, который решает, какие обои поклеить и куда поставить мебель. Тут описывается как будет выглядеть страница, какие тексты и картинки на ней будут.
И View, оно же Представление, оно же Вьюшка, которое отвечает за бизнес-логику. Это как менеджер, который получает запросы от пользователей, решает, с какими данными работать через Model, и в итоге говорит Template, что именно отобразить.
Это чем-то похоже на более известную модель MVC (Model-View-Controller) только вместо темплейта там котроллЕр немного другая схема взаимодействия частей.

Не понятно? Не переживай, сейчас будут примеры.
Для начала нам нужно сделать несколько важных настроек в файле конфигурации Django (settings.py). Это как подготовка перед вечеринкой: сначала ты расставляешь столы, проверяешь диван под ультрафиолетовой лампой, готовишь еду, а уже потом зовёшь гостей. Так вот, тут нам нужно добавить наше новое приложение reviews в список где перечисляются все приложения, которые использует проект. Без этого Django не будет знать о наших моделях, вьюхах и других вещах, которые мы там создали.

INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"reviews", # наше новое приложение
]
Тоже самое нам надо сделать, для шаблонов, чтобы джанго знал в какой папке их искать.

TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [BASE_DIR / "templates"], # Здесь мы указываем, что шаблоны лежат в /templates
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]
Все готово, теперь начинаем вечеринку!
И начнем её с модели, то есть самих данных. В файле models (models.py) опишем модель для нашей статьи обзора шаурмы. То есть, структуру данных стати в нашем приложении и в таблице в базе данных.
Для этого создается класс (class Article), внутри которого есть поля: заголовок, текст самого обзора и дата публикации. Тут указаны названия полей (title, content, publishied date), их тип (models.CharField) и ограничения, если есть (max_length=200, auto_now_add=True)

from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200) # заголовок обзора, максимальная длина 200 символов
content = models.TextField() # текст обзора
published_date = models.DateTimeField(auto_now_add=True) # дата автоматом ставится при создании
def __str__(self):
return self.title
Теперь начинается магия. Django может из этого кода создать для нас таблицу в базе данных. Для этого нужно сделать миграции и затем их применить :

python manage.py makemigrations
python manage.py migrate
Вуаля! В базе данных создалась таблица для обзоров. По умолчанию это SQLite, так как экзибит встроил её в пайтон, но можно подключить и другие БД в настройках.
Теперь надо еще рассказать тебе, дружок, об одной штуке которая называется ORM или Object-Relational Mapping, которую как раз использует Django. Это способ работать с базой данных через объектную модель, которую мы только что описали. То есть можно не писать длинные SQL-запросы вручную. Мы можем создавать, читать, обновлять и удалять записи простыми методами на Python. Например, чтобы создать новый обзор можно ввести пару простых команд в консоли.

>>> from reviews.models import Article
>>> article = Article.objects.create(title="Лучшая шаурма в городе", content="Очень вкусно, рекомендую!")
>>> print(article.title)
Лучшая шаурма в городе
>>>
Всё, запись появилась в базе без явного SQL запроса, а просто путем вызова метода create.
Теперь перейдем к шаблонам, которые нужны для отображения наших статей данных на сайте. Это по сути HTML-файлы, которые могут включать динамические данные, в нашем случае список статей. Они лежат в папке путь к которой мы указывали ранее.

<!DOCTYPE html>
<html>
<head>
<title>Список обзоров на шаурму</title>
</head>
<body>
<h1>Список обзоров</h1>
<ul>
{% for article in articles %}
<li>{{ article.title }} — {{ article.published_date }}</li>
{% endfor %}
</ul>
</body>
</html>
Тут используются теги, которые заключены в фигурные скобки {{ article.title }}, чтобы подставить данные. Это и есть «шаблонизация». Тут можно не только подставлять данные, но и проводить различные операции с ними. В нашем примере нам пришел список из нескольких статей мы прошлись по нему циклом for (for article in articles), и вывели на страницу в списке название каждой статьи и дату ее публикации. Также можно использовать теги с оператором if чтобы применять логику на этой стороне.
А откуда мы получаем эти данные со статьями? А они передаются из представлений.
Давай настроим наше представление, которое будет брать обзоры из модели и отдавать их в шаблон. В файле (views.py) связываем две наших предыдущих части.

from django.shortcuts import render
from .models import Article
def article_list(request):
# Получаем все статьи из базы
articles = Article.objects.all()
# Передаём их в шаблон
return render(request, 'article_list.html', {'articles': articles})
Сначала (articles = Article.objects.all()) мы обращаемся к модели и забираем список всех статей из базы, а затем (return render(request, 'article_list.html', {'articles': articles})) передаем эти данные в наш шаблон.
Таким образом мы соединили все три наших части - модель, шаблон и представление.
[картинка как пример, на моушене лучше нормально нарисовать связь]

Ну и чтобы все полноценно заработало и мы могли открыть страницу со списком статей, нужно указать маршрут до неё (urls.py). Тут указывается путь который нужно написать в браузере, и функцию, которую будет вызвана в этом случае (path('articles/' и article_list)

from django.contrib import admin
from django.urls import path
from reviews.views import article_list
urlpatterns = [
path('admin/', admin.site.urls),
path('articles/', article_list, name='article_list'), # URL для списка статей
]

Наконец можно вернуться в браузер, перейти по маршруту http://127.0.0.1:8000/articles/, и наслаждаться проделанной работой.
Ну разве не круто? Это еще не все что умеет джанго. Представь, что твой сайт стал таким популярным, что пришлось нанять редакторов которые пишут новые обзоры. Запросы к бд они явно не будут делать, им нужен удобный интерфейс, чтобы создавать и редактировать статьи. Это интерфейс администратора, или просто админка. Ее можно написать отдельно, настроить авторизацию, права пользователей, чтобы не каждый встречный мог зайти и прочие важные штуки, но это требует времени и сил. А можно опять прибегнуть к помощи джанго который делает это все возможным прям из коробки. Давай включим её.
Для начала нужно чтобы админка знала о нашей модели со статями Article которую мы создали ранее. Ее нужно зарегистрировать её в файле настроек админки (admin.py)

from django.contrib import admin
from .models import Article
admin.site.register(Article)
Так мы говорим с какими именно данными нужно работать. В нашем случае это сущность статьи.
Это нужно чтобы эта модель появилась в админке, ведь нам нужно работать не со всеми данными из нашего приложения, и тут мы говорим с какими именно.
Для входа в админку нужен аккаунт с правами администратора. Создадим суперпользователя так:
Затем создается аккаунт администратора, и можно переходить по адресу админки (http://127.0.0.1:8000/admin/ и авторизовываться.

python manage.py createsuperuser
Тут будет панель с нашей моделью стати (Articles) и теперь можно добавлять новые статьи, просматривать уже существующие, редактировать или удалять их через этот интерфейс. Прямо как CMS, которая система управления контентом, но автоматически созданная джанго лично для тебя без написания лишнего кода и верстки новых страниц.
Это экономит кучу времени, особенно на ранних этапах разработки.
Django также заботится и о безопасности, в него встроены базовые механизмы защиты от распространённых атак.
Это SQL-инъекции, то есть попытки подсунуть вредоносные команды в запрос к базе данных; межсайтовый скриптинг XSS, когда хакер пытается подсунуть злой код на твою страницу и CSRF атаки, где злодей пытается заставить твой сайт сделать действие от имени твоего пользователя.
У джанго в кармане миллион других полезных штук, таких как работа с формами, локализация, аутентификация, логгироване, кеширование, отправка писем, а еще пончо, шляпа и пригоршня долларов.
Ещё один плюс джанго - это сообщество. Куча разработчиков создают для Django готовые пакеты, плагины и расширения.

Нужно что-то особенное, типа интеграции с платёжкой или специальный поиск по сайту? Чаще всего уже есть готовое решение.

По итогу Django отлично подойдёт как для небольших сайтов, ведь ты можешь стартовать проект за считанные часы, так и для крупных проектов. Например, BitBucket, Spotify, YouTube — все они в разное время использовали или до сих пор используют Django. Это фреймворк, который проверен боем. Так что не бойся пробовать подружиться с ним.
А под конец как всегда вопрос: джанго несомненно крутой, но как думаешь, какой самый главный его недостаток? Ответ пиши в коментах!