Ответ
Работал с Django 3.2 LTS и 4.x, включая актуальную LTS 4.2. Предпочитаю LTS-версии (3.2, 4.2) для production из-за их длительной поддержки и стабильности. Знаком с ключевыми изменениями в этих версиях:
- Django 4.0+:
- Удалена поддержка Python 3.6 (требуется Python 3.8+).
- Новый
async-интерфейс ORM, позволяющий выполнять асинхронные запросы к базе данных без блокировки. - Переход на
zoneinfo(стандартная библиотека) вместоpytzдля работы с часовыми поясами, что упрощает управление зависимостями и повышает производительность.
Пример асинхронного представления (Django 4.x):
from django.http import JsonResponse
from asgiref.sync import sync_to_async
# Пример асинхронной функции, которая может взаимодействовать с ORM
async def get_data_async():
# await sync_to_async(MyModel.objects.all)() # Пример асинхронного ORM-запроса
return {"status": "ok", "data": "async_result"}
async def my_async_view(request):
result = await get_data_async()
return JsonResponse(result)
- Django 3.2 LTS:
- Поддержка
JSONFieldдля всех поддерживаемых баз данных (PostgreSQL, MySQL, Oracle, SQLite), что унифицирует работу с JSON-данными. - Улучшения в
admin.StackedInlineиadmin.TabularInlineдля более гибкой настройки административной панели. - Добавление
default_auto_fieldдля автоматического созданияBigAutoFieldдля первичных ключей в новых проектах, что предотвращает переполнение ID в больших таблицах.
- Поддержка
Для новых проектов всегда выбираю актуальную LTS-версию (на данный момент 4.2) для обеспечения долгосрочной поддержки и доступа к современным возможностям.
Ответ 18+ 🔞
Слушай, а вот про эти версии Django, блядь, у меня просто отдельная история. Работал и с 3.2 LTS, и с 4.x, включая эту самую актуальную LTS 4.2. И знаешь, что я тебе скажу? Для продакшена — только LTS, ёпта! Иначе потом будешь как дурак бегать, обновляя хуйню каждые полгода, а поддержка кончилась. 3.2, 4.2 — вот твои друзья, стабильные, как швейцарские часы, блядь.
А теперь про разницу, потому что там, сука, есть на что посмотреть.
Django 4.0 и выше — это уже другой уровень, блядь:
- Во-первых, Python 3.6 там откинулся, как старый хомяк. Теперь нужен Python 3.8+, так что если твой проект на древности — готовься к миграции, веселуха.
- Самое главное — появился
async-интерфейс для ORM. Раньше ORM блокировал всё, как говно в трубе, а теперь можно делать асинхронные запросы к базе. Не везде и не всегда, но сам факт, блядь, уже прогресс! - Часовые пояса. Раньше все танцевали с
pytz, а теперь перешли наzoneinfoиз стандартной библиотеки. Меньше зависимостей, меньше геморроя, в рот меня чих-пых! Производительность тоже подросла.
Вот, смотри, как теперь можно написать асинхронную вьюху, чтоб не спамить синхронным кодом:
from django.http import JsonResponse
from asgiref.sync import sync_to_async
async def get_data_async():
# Допустим, тут будет твой асинхронный запрос к моделям
# result = await sync_to_async(MyModel.objects.all)()
return {"status": "ok", "data": "async_result"}
async def my_async_view(request):
result = await get_data_async()
return JsonResponse(result)
А теперь про 3.2 LTS, нашу старую добрую рабочую лошадку:
JSONFieldстал универсальным солдатом, блядь! Раньше он только в PostgreSQL нормально жил, а теперь его завезли и в MySQL, и в Oracle, и даже в SQLite. Один интерфейс — и везде работает, красота!- Админку подпилили. Эти
admin.StackedInlineиadmin.TabularInlineстали гибче, можно теперь творить в панельке админа такие интерфейсы, что мама не горюй. - Добавили
default_auto_field. Это чтобы новые проекты по умолчанию использовалиBigAutoFieldдля первичных ключей. А то бывало, на старойAutoFieldID переполнялся на больших таблицах, и потом пиздец, а не миграция.
Короче, вывод простой, как три копейки: для новых проектов бери актуальную LTS, сейчас это 4.2. И будешь ты с долгой поддержкой, и с современными плюшками. А не будешь — сам потом разгребай, когда обновлять придётся с не-LTS версии, это тот ещё геморрой, поверь.