Ответ
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, асинхронного программирования и получения актуальных обновлений безопасности и производительности.
Ответ 18+ 🔞
А, ну вот, смотри, опять эти версии попёрли, Django 3, блядь. Ну что, разбираем, чем он от второй версии так уж охуенно отличается, а то сидишь, как мудак, и не понимаешь, на какой хуй переходить.
Ну, короче, главные фишки:
-
Про Питон:
- Django 3: Требует, сука, Python 3.6 или новее. Всё, прощай старое говно. Теперь можно юзать все эти модные штуки из языка.
- Django 2: Работал с Python 3.4+. Но слушай сюда, ёпта: поддержку второй версии уже прикрыли, нахуй. Так что если ты ещё на ней сидишь — ты, блядь, ходячая мишень. Переезжай, пока не ебнули.
-
ASGI, эта штука асинхронная:
- Django 3: Впервые, блядь, завезли нормальную поддержку ASGI. Это типа как WSGI, только для асинхронности. Теперь можно писать
async defвьюхи, мидлвари — всё, что душе угодно. Овердохуища полезно для WebSocket'ов или когда запросы долгие, как моё терпение. - Django 2: Только старый добрый WSGI, синхронный, как очередь в сбербанке. Скучно, блядь.
- Django 3: Впервые, блядь, завезли нормальную поддержку ASGI. Это типа как WSGI, только для асинхронности. Теперь можно писать
-
JSONField в PostgreSQL стал умнее:
- Django 3: Наконец-то сделали нормальные плюшки для
JSONField. Добавили новые функции для запросов и, что главное — индексы GinIndex. Раньше поиск по JSON'у был медленнее, чем я утром встаю, а теперь — хуяк, и всё летает.
- Django 3: Наконец-то сделали нормальные плюшки для
-
Выражения в ORM:
- Django 3: Сделали так, что можно строить запросы покруче. Не то чтобы раньше было нельзя, но теперь — удобнее, блядь.
-
Пример (смотри, не трогай код, он правильный):
from django.db.models import Value from django.db.models.functions import Concat # Склеиваем имя и фамилию в одно поле, чтоб не ебаться потом Author.objects.annotate( full_name=Concat('first_name', Value(' '), 'last_name') )
-
Пароли теперь ещё крепче:
- Django 3: Подвезли новый алгоритм хеширования — Argon2. Говорят, он прочнее, чем моя решимость начать бегать по утрам. Безопасность, ёпта, это важно, а то потом будешь охуевать, когда тебя взломают.
-
Подзапросы перестали быть пыткой:
- Django 3: С
SubqueryиExistsтеперь работать — одно удовольствие. Раньше мозг выносило, а сейчас вроде как человечно сделали.
- Django 3: С
-
Админка принарядилась:
- Django 3: Чуть-чуть подрихтовали интерфейс админки. Не то чтобы ваще космос, но приятно глазу, блядь.
Итог, ёбана: Сидеть на Django 2 — это как ездить на Запорожце в 2024-м. Стыдно, небезопасно и никому не нужно. Переходи на третью (а лучше сразу на свежую), получай все эти асинхронные плюшки, безопасность и не будь, прости господи, распиздяем.