Каковы ключевые отличия Django 2 от Django 3?

Ответ

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), который является синхронным.
  • Улучшения для PostgreSQL JSONField:

    • Django 3: Расширил возможности работы с JSONField в PostgreSQL, добавив новые функции для запросов и индексов. В частности, появился django.contrib.postgres.indexes.GinIndex для более эффективного поиска по данным в JSONField, что значительно ускоряет операции с JSON-документами.
  • Пользовательские выражения в моделях:

    • 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: Улучшены API для работы с Subquery и Exists, делая их более интуитивными и мощными для сложных запросов к базе данных.
  • Обновленный интерфейс администратора:

    • 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, синхронный, как очередь в сбербанке. Скучно, блядь.
  • JSONField в PostgreSQL стал умнее:

    • Django 3: Наконец-то сделали нормальные плюшки для JSONField. Добавили новые функции для запросов и, что главное — индексы GinIndex. Раньше поиск по JSON'у был медленнее, чем я утром встаю, а теперь — хуяк, и всё летает.
  • Выражения в 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 2 — это как ездить на Запорожце в 2024-м. Стыдно, небезопасно и никому не нужно. Переходи на третью (а лучше сразу на свежую), получай все эти асинхронные плюшки, безопасность и не будь, прости господи, распиздяем.