Ответ
Архитектура Django основана на паттерне Model-View-Template (MVT), который является вариацией классического MVC. Каждый компонент выполняет свою четкую роль в обработке HTTP-запроса.
-
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)
-
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})
-
*Templates (`.html`)**
- Роль: Уровень представления (буква T в MVT). Шаблоны отвечают за генерацию HTML-страницы, которую увидит пользователь. Они используют специальный синтаксис Django Template Language (DTL) для отображения данных, переданных из представления.
- Пример:
<h1>Список продуктов</h1> <ul> {% for product in products %} <li>{{ product.name }} - {{ product.price }} руб.</li> {% endfor %} </ul>
-
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-защиты).