← Назад к вопросам
В чем разница между Django Template Render и Django Rest Framework?
2.0 Middle🔥 111 комментариев
#Django#REST API и HTTP
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Django Template Rendering vs Django REST Framework
Django Template Rendering и Django REST Framework (DRF) — это два разных подхода к построению веб-приложений. Они решают разные задачи и используют разные технологии.
Django Template Rendering
Что это:
- Традиционный подход Django для рендеринга HTML-страниц на сервере
- Шаблоны (templates) содержат HTML с переменными Django
- Сервер генерирует полную HTML-страницу и отправляет браузеру
Как работает:
# views.py
from django.shortcuts import render
from django.views import View
class UserListView(View):
def get(self, request):
users = User.objects.all()
return render(request, 'users/list.html', {'users': users})
# urls.py
from django.urls import path
urlpatterns = [
path('users/', UserListView.as_view(), name='user_list'),
]
<!-- templates/users/list.html -->
<h1>Пользователи</h1>
<ul>
{% for user in users %}
<li>{{ user.name }} - {{ user.email }}</li>
{% endfor %}
</ul>
Поток данных:
Browser Request
↓
Django View (обработка)
↓
Database (получение данных)
↓
Template (рендеринг HTML)
↓
HTML Response
↓
Browser (отображение)
Характеристики:
- Рендеринг: На сервере (server-side rendering)
- Ответ: HTML-страница
- Фронтенд: Зависит от сервера
- JavaScript: Дополнительный скрипт на странице
- SEO: Хороший (контент в HTML)
Django REST Framework
Что это:
- Фреймворк для создания REST API
- Возвращает данные в JSON формате, а не HTML
- Фронтенд отделен от бэкенда (может быть отдельное SPA приложение)
Как работает:
# models.py
from django.db import models
class User(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
# serializers.py
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'name', 'email']
# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
class UserListAPIView(APIView):
def get(self, request):
users = User.objects.all()
serializer = UserSerializer(users, many=True)
return Response(serializer.data)
def post(self, request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
# urls.py
from django.urls import path
urlpatterns = [
path('api/users/', UserListAPIView.as_view(), name='user_list_api'),
]
Ответ API:
[
{
"id": 1,
"name": "John",
"email": "john@example.com"
},
{
"id": 2,
"name": "Jane",
"email": "jane@example.com"
}
]
Поток данных:
API Request (JSON)
↓
Django REST View (обработка)
↓
Database (получение данных)
↓
Serializer (преобразование в JSON)
↓
JSON Response
↓
Frontend App (React, Vue, Angular)
↓
Browser (отображение)
Характеристики:
- Рендеринг: На клиенте (client-side rendering)
- Ответ: JSON данные
- Фронтенд: Независимое приложение
- JavaScript: Обязателен
- SEO: Сложнее (контент загружается JS)
Сравнение
| Аспект | Django Templates | DRF |
|---|---|---|
| Ответ | HTML страница | JSON данные |
| Рендеринг | Сервер | Клиент |
| Фронтенд | Зависит от Django | Независим (React, Vue) |
| Тестирование | Тесты HTML | Тесты JSON |
| SEO | Хороший | Требует SSR |
| Мобильное приложение | Сложнее | Легче (один API) |
| Совместное использование фронта | Сложнее | Легче |
Примеры использования
Django Templates — когда использовать:
# Traditional web application
# Server-side rendering
class ProductListView(View):
def get(self, request):
products = Product.objects.all()
return render(request, 'products/list.html', {
'products': products
})
# Хорошо подходит для:
# - Традиционных веб-сайтов
# - Блогов
# - Admin интерфейсов
# - SEO-критичных сайтов
DRF — когда использовать:
# REST API
# Client-side rendering
class ProductListAPIView(APIView):
def get(self, request):
products = Product.objects.all()
serializer = ProductSerializer(products, many=True)
return Response(serializer.data)
# Хорошо подходит для:
# - Мобильных приложений
# - Single Page Applications (SPA)
# - Микросервисов
# - Множественных клиентов (web, mobile, desktop)
Гибридный подход
Можно использовать оба одновременно:
# urls.py
urlpatterns = [
# Django Templates для web
path('products/', ProductListView.as_view()),
# DRF API для мобильного приложения
path('api/v1/products/', ProductListAPIView.as_view()),
]
Хорошая практика в современной разработке
Вариант 1: Full DRF + Frontend Framework
Backend: Django + DRF (JSON API)
↓
Frontend: React / Vue / Angular (SPA)
Преимущества:
- Полное разделение ответственности
- Легче масштабировать
- Один API для всех клиентов
- Лучше для мобильных приложений
Вариант 2: Django Templates + HTMX
<!-- HTMX позволяет обновлять части страницы без перезагрузки -->
<button hx-get="/api/users/" hx-target="#user-list">
Загрузить пользователей
</button>
<div id="user-list"></div>
Преимущества:
- Никакого фронтенд-фреймворка
- Быстро развивается
- SEO friendly
Практический совет
Выбирайте в зависимости от проекта:
- Блог, маркетинг сайт, кorporative portal → Django Templates
- Мобильное приложение → DRF API
- Modern Web App (SPA) → DRF + React/Vue
- Быстрый MVP → Django Templates + HTMX
Выводы
- Django Templates: Сервер генерирует HTML, традиционный подход
- DRF: Сервер предоставляет API, фронтенд отдельный
- Оба полезны в зависимости от требований проекта
- Modern stack: DRF + React/Vue для максимальной гибкости