Ответ
Django использует архитектурный паттерн Model-View-Template (MVT), который является вариацией классического Model-View-Controller (MVC). В MVT терминология адаптирована под специфику веб-разработки Django:
- Model: Отвечает за данные и бизнес-логику, связанную с ними. Это объекты Python, которые определяют структуру данных (через Django ORM) и взаимодействуют с базой данных.
- View: Обрабатывает HTTP-запросы, взаимодействует с Model для получения данных и передает их в Template. В контексте MVC, Django View выполняет функции контроллера.
- Template: Отвечает за представление данных пользователю, обычно в виде HTML. Использует Django Template Language (DTL) для динамического отображения информации.
Почему MVT? Django переименовал "Controller" в "View", чтобы подчеркнуть, что большая часть "контролирующей" логики (маршрутизация, обработка запросов, диспетчеризация) уже встроена во фреймворк. Разработчик фокусируется на "View" (что делать с запросом) и "Template" (как это показать), а не на низкоуровневом управлении потоком.
Пример:
# models.py (Model)
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
# views.py (View)
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.all()
return render(request, 'blog/post_list.html', {'posts': posts})
# blog/post_list.html (Template)
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.content }}</p>
{% endfor %}
MVT способствует четкому разделению ответственности, что упрощает разработку, тестирование и поддержку веб-приложений на Django.