|
Язык / Платформа
|
Java 17+ / JVM
|
Python 3.11+
|
|
Тип фреймворка
|
Полный фреймворк для микросервисов и REST API
|
Full-stack веб-фреймворк (MTV)
|
|
Философия
|
“Convention + Configuration” / IoC / DI
|
“Batteries included” / DRY / Convention over configuration
|
|
Архитектура
|
MVC, REST, Reactive, IoC контейнер
|
MTV (Model-Template-View)
|
|
Точка входа
|
Класс с @SpringBootApplication
|
Скрипт manage.py runserver
|
|
Создание проекта
|
spring init --dependencies=web,data-jpa
|
django-admin startproject mysite
|
|
Главный файл
|
Application.java
|
manage.py
|
|
Пример "Hello World" контроллера
|
java<br/>@RestController<br/>public class HelloController {<br/> @GetMapping("/hello")<br/> public String hello() { return "Hello, Spring!"; }<br/>}
|
python<br/>from django.http import HttpResponse<br/>def hello(request):<br/> return HttpResponse("Hello, Django!")
|
|
Запуск сервера
|
mvn spring-boot:run или ./gradlew bootRun
|
python manage.py runserver
|
|
Роутинг (маршруты)
|
java<br/>@GetMapping("/user/{id}")
|
python<br/>path('user/<int:id>/', views.user)
|
|
ORM / работа с БД
|
JPA (Hibernate) через @Entity, @Repository
|
Django ORM через models.Model
|
|
Пример модели
|
java<br/>@Entity<br/>class User {<br/> @Id Long id;<br/> String name;<br/>}
|
python<br/>class User(models.Model):<br/> name = models.CharField(max_length=100)
|
|
CRUD-репозиторий
|
java<br/>interface UserRepo extends JpaRepository<User,Long>{}
|
Django ORM напрямую: User.objects.all()
|
|
Создание REST API
|
java<br/>@GetMapping("/api/users")
|
python<br/>from rest_framework import viewsets (через Django REST Framework)
|
|
Dependency Injection
|
Автоматически через @Autowired, @Service, @Component
|
Django использует импорт/фабрики; DI отсутствует
|
|
Middleware / Filters
|
Через HandlerInterceptor или @ControllerAdvice
|
Через MIDDLEWARE в settings.py
|
|
Валидация
|
@Valid, @NotNull, @Size
|
Django Forms или DRF Serializers
|
|
Шаблоны (Frontend)
|
Thymeleaf, Freemarker (по желанию)
|
Django Templates встроен
|
|
REST API
|
@RestController + Spring Web
|
Django REST Framework (доп. модуль)
|
|
Асинхронность
|
Spring WebFlux (Project Reactor)
|
Django 3.1+ поддерживает async def, DRF — ограниченно
|
|
Авторизация / Безопасность
|
Spring Security
|
Django Auth (middleware, permissions, sessions)
|
|
Миграции БД
|
Flyway / Liquibase / Hibernate auto-ddl
|
Встроенные миграции python manage.py makemigrations
|
|
Unit-тестирование
|
JUnit 5 + Mockito
|
unittest / pytest + Django TestCase
|
|
Документация / API docs
|
SpringDoc (OpenAPI 3, Swagger UI)
|
DRF + drf-spectacular / drf-yasg
|
|
DevTools / Live Reload
|
Spring Boot DevTools
|
Runserver autoreload
|
|
Docker
|
Официальный образ openjdk:17-jdk + Dockerfile
|
Официальный образ python:3.11-slim
|
|
Развёртывание
|
JAR/WAR, Kubernetes, Docker, Cloud (AWS, Azure, GCP)
|
Gunicorn/Uvicorn, Docker, Kubernetes
|
|
Производительность (RPS)
|
~10–15k RPS на REST (Tomcat/Netty)
|
~3–6k RPS (Gunicorn, WSGI)
|
|
Кривая обучения
|
Более сложная (архитектурно строгая)
|
Проще начать, но сложнее масштабировать
|
|
Когда выбрать
|
Большие микросервисы, enterprise-интеграции, high-load backend
|
Быстрые веб-приложения, стартапы, админки
|
|
Когда не выбрать
|
Маленькие pet-проекты, простые REST-API
|
Высоконагруженные микросервисы или сильные DI-требования
|