Назовите и опишите ключевые компоненты архитектуры Django

«Назовите и опишите ключевые компоненты архитектуры Django» — вопрос из категории Django, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Архитектура Django основана на паттерне **Model-View-Template (MVT)**, который является вариацией классического MVC. Каждый компонент выполняет свою четкую роль в обработке HTTP-запроса. 1. **Models (`models.py`)** - **Роль:** Уровень данных (буква **M** в MVT). Модели описывают структуру данных приложения в виде Python-классов. Django ORM (Object-Relational Mapper) использует их для создания таблиц в базе данных и взаимодействия с ними (создание, чтение, обновление, удаление записей). - **Пример:** ```python from django.db import models class Product(models.Model): name = models.CharField(max_length=200) price = models.DecimalField(max_digits=10, decimal_places=2) ``` 2. **Views (`views.py`)** - **Роль:** Уровень бизнес-логики (буква **V** в MVT). Представление — это функция или класс, который принимает HTTP-запрос, взаимодействует с моделями для получения или изменения данных и возвращает HTTP-ответ, обычно передавая данные в шаблон. - **Пример:** ```python from django.shortcuts import render from .models import Product def product_list(request): products = Product.objects.all() return render(request, 'shop/product_list.html', {'products': products}) ``` 3. **Templates (`*.html`)** - **Роль:** Уровень представления (буква **T** в MVT). Шаблоны отвечают за генерацию HTML-страницы, которую увидит пользователь. Они используют специальный синтаксис Django Template Language (DTL) для отображения данных, переданных из представления. - **Пример:** ```html

Список продуктов

    {% for product in products %}
  • {{ product.name }} - {{ product.price }} руб.
  • {% endfor %}
``` 4. **URLs (`urls.py`)** - **Роль:** Маршрутизатор. Этот компонент связывает URL-адреса с конкретными представлениями (views). Он анализирует запрошенный URL и решает, какая функция или класс должны его обработать. - **Пример:** ```python from django.urls import path from .views import product_list urlpatterns = [ path('products/', product_list, name='product-list'), ] ``` **Другие важные компоненты:** - **Forms (`forms.py`):** Упрощают создание HTML-форм, валидацию и обработку данных, отправленных пользователем. - **Admin:** Автоматически генерируемый административный интерфейс для управления моделями данных. - **Middleware:** Компоненты для глобальной обработки запросов и ответов (например, для аутентификации или CSRF-защиты).