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