Ответ
Django 3 принес значительные улучшения и изменения по сравнению с Django 2, фокусируясь на современных возможностях Python и расширении функциональности.
Ключевые отличия:
-
Поддержка Python:
- Django 3: Требует Python 3.6+ (и выше). Это позволило использовать новые синтаксические конструкции и возможности языка.
- Django 2: Поддерживал Python 3.4+ (до 3.7). Важно отметить, что поддержка Django 2.x прекращена, и переход на Django 3+ является обязательным для получения обновлений безопасности и новых функций.
-
ASGI-поддержка:
- Django 3: Впервые получил полноценную встроенную поддержку ASGI (Asynchronous Server Gateway Interface). Это открыло путь для создания асинхронных представлений (
async def
), мидлварей и других компонентов, что критически важно для высокопроизводительных приложений, работающих с WebSocket или долгими запросами. - Django 2: Работал исключительно на WSGI (Web Server Gateway Interface), который является синхронным.
- Django 3: Впервые получил полноценную встроенную поддержку ASGI (Asynchronous Server Gateway Interface). Это открыло путь для создания асинхронных представлений (
-
Улучшения для PostgreSQL JSONField:
- Django 3: Расширил возможности работы с
JSONField
в PostgreSQL, добавив новые функции для запросов и индексов. В частности, появилсяdjango.contrib.postgres.indexes.GinIndex
для более эффективного поиска по данным вJSONField
, что значительно ускоряет операции с JSON-документами.
- Django 3: Расширил возможности работы с
-
Пользовательские выражения в моделях:
- Django 3: Улучшена работа с выражениями в ORM, позволяя создавать более сложные и гибкие запросы.
-
Пример (Django 3):
from django.db.models import Value from django.db.models.functions import Concat # Объединение полей first_name и last_name в одно поле full_name Author.objects.annotate( full_name=Concat('first_name', Value(' '), 'last_name') )
-
Улучшенная система проверки паролей:
- Django 3: Добавлена поддержка алгоритма хеширования паролей Argon2 (
django.contrib.auth.hashers.Argon2PasswordHasher
), который считается более безопасным и устойчивым к атакам по сравнению с PBKDF2.
- Django 3: Добавлена поддержка алгоритма хеширования паролей Argon2 (
-
Упрощение работы с подзапросами:
- Django 3: Улучшены API для работы с
Subquery
иExists
, делая их более интуитивными и мощными для сложных запросов к базе данных.
- Django 3: Улучшены API для работы с
-
Обновленный интерфейс администратора:
- Django 3: Получил незначительные визуальные улучшения и обновленную тему для административной панели, повышающие удобство использования.
Вывод: Переход на Django 3 (и далее на 4+) рекомендуется для использования современных возможностей Python, асинхронного программирования и получения актуальных обновлений безопасности и производительности.