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

Ответ

Архитектура Django основана на паттерне Model-View-Template (MVT), который является вариацией классического MVC. Каждый компонент выполняет свою четкую роль в обработке HTTP-запроса.

  1. Models (models.py)

    • Роль: Уровень данных (буква M в MVT). Модели описывают структуру данных приложения в виде Python-классов. Django ORM (Object-Relational Mapper) использует их для создания таблиц в базе данных и взаимодействия с ними (создание, чтение, обновление, удаление записей).
    • Пример:

      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-ответ, обычно передавая данные в шаблон.
    • Пример:

      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) для отображения данных, переданных из представления.
    • Пример:
      <h1>Список продуктов</h1>
      <ul>
        {% for product in products %}
            <li>{{ product.name }} - {{ product.price }} руб.</li>
        {% endfor %}
      </ul>
  4. URLs (urls.py)

    • Роль: Маршрутизатор. Этот компонент связывает URL-адреса с конкретными представлениями (views). Он анализирует запрошенный URL и решает, какая функция или класс должны его обработать.
    • Пример:

      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-защиты).