С какими версиями Django вы работали?

Ответ

Работал с 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 для первичных ключей. А то бывало, на старой AutoField ID переполнялся на больших таблицах, и потом пиздец, а не миграция.

Короче, вывод простой, как три копейки: для новых проектов бери актуальную LTS, сейчас это 4.2. И будешь ты с долгой поддержкой, и с современными плюшками. А не будешь — сам потом разгребай, когда обновлять придётся с не-LTS версии, это тот ещё геморрой, поверь.