Оригинальная статья: William S. Vincent — What’s New in Django 3.1
Django 3.1 будет выпущен в начале августа 2020 года и будет содержат ряд важных новых функций и множество мелких улучшений, включая асинхронные представления и поддержку middleware, асинхронные тесты, JSONField для всех поддерживаемых серверных баз данных (не только PostgreSQL), обновленную страницу администратора, SECURE_REFERRER_POLICY, и многое другое. Официальные примечания к выпуску являются каноническим справочным материалом, а в этом посте я постараюсь осветить некоторые основные моменты, а также дать советы по обновлению.
Всегда желательно быть в курсе последней версии Django и Python и по возможности переводить проект на эти версии. Это приведет к более быстрому, более поддерживаемому и функционально загруженному коду. Чтобы выполнить обновление, создайте новую виртуальную среду, установите Django 3.1 и запустите свой набор тестов (у вас же они есть, да?), Добавьте флаг -Wa, чтобы отобразить полные предупреждения об устаревании.
(env) $ python -Wa manage.py test
Если у вас еще нет тестов в вашем проекте, вы все равно можете использовать python -Wa manage.py runserver, чтобы увидеть некоторые предупреждения. Обратитесь к официальному списку обновлений для получения дополнительной информации.
Django 3.1 требует Python 3.6, 3.7 или 3.8. Вы можете прочитать больше о поддерживаемых версиях Python на странице предварительных требований Django. Если вам интересно узнать о версии и политике выхода версий Django, на странице download отображается график поддерживаемых версий и будущие выпуски LTS (долгосрочная поддержка).
Для большего контекста, подкаст Django Chat, организованный совместно сотрудником Django Карлтоном Гибсоном, имеет эпизоды о Django Versions и Django Security Releases.
С версией 3.0 Django всерьез начал свое асинхронное путешествие с поддержкой ASGI. В версии 3.1 Django теперь поддерживает полностью асинхронный путь запроса с views, middleware и tests.
Базовый пример, представленный в документации, — это сделать запрос, который ждет полсекунды, а затем возвращает ответ.
# views.py async def my_view(request): await asyncio.sleep(0.5) return HttpResponse('Hello, async world!')
Это работает независимо от того, используете ли вы режим WSGI или ASGI, который был впервые добавлен в 3.0.
Более актуальный пример будет асинхронная загрузка URL-адреса в Django с использованием HTTPX, версии популярной библиотеки requests следующего поколения.
Поддержка JSONField для моделей и форм теперь распространена на все поддерживаемые Django бэкэнды (MariaDB, MySQL, Oracle и SQLite), а не только на PostgreSQL. Это обеспечивает полную поддержку запросов JSONField.
# models.py from django.db import models class SoccerInfo(models.Model): data = models.JSONField() SoccerInfo.objects.create(data={ 'team': 'Liverpool FC', 'coaches': ['Klopp', 'Krawietz'], 'players': {'forwards': ['Salah', 'Firmino', 'Mané']}, }) SoccerInfo.objects.filter( data__team='Liverpool', data__coaches__contains='Klopp', data__players__has_key='forwards', ).delete()
Админка теперь имеет боковую панель слева для облегчения навигации на больших экранах. Старые хлебные крошки breadcrumbs все еще доступны. Если вы хотите отключить новую боковую панель, установите для AdminSite.enable_nav_sidebar значение False.
Вот старый вид администратора:
А вот новый вид администратора с боковой панелью:
Django переключился с использования os.path на более современную и лаконичную pathlib. Если вы создаете новый проект с помощью команды startproject, для автоматически сгенерированного файла settings.py теперь по умолчанию используется pathlib.
Вот версия Django 3.0:
# settings.py import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
А вот новая версия Django 3.1:
# settings.py from pathlib import Path BASE_DIR = Path(__file__).resolve(strict=True).parent.parent DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } }
SECURE_REFERRER_POLICY теперь по умолчанию имеет ‘same-origin’, что более безопасно. Это один из многих шагов, которые команда Django делает для обеспечения безопасности. Вы можете — и должны — запустить Django deployment checklist, чтобы убедиться, что ваш проект защищен перед началом работы: python manage.py check —deploy.
Есть еще много новых функций, подробно описанных в official release notes, которые стоит прочитать полностью, а также сопровождающую документацию по Django 3.1.
Каждый новый релиз Django — это командная работа, и 3.1 не является исключением. Стипендиаты Django, Карлтон Гибсон и Мариуш Фелиаск, внесли большой вклад в общую работу, чтобы гарантировать, что процесс выпуска происходит гладко и в срок. Особую благодарность заслуживают Эндрю Годвин за его работу над асинхронными функциями и Сейдж Абдулла за добавление кросс поддержки базы данных JSONFields.
Если вы хотите поддержать продолжение разработки Django, пожалуйста, сделайте это на официальной странице сбора средств или станьте спонсором GitHub.
Краткий перевод: https://vuejs.org/guide/components/v-model.html Основное использование v-model используется для реализации двусторонней привязки в компоненте. Начиная с Vue…
Сегодня мы рады объявить о выпуске Vue 3.4 «🏀 Slam Dunk»! Этот выпуск включает в…
Vue.js — это универсальный и адаптируемый фреймворк. Благодаря своей отличительной архитектуре и системе реактивности Vue…
Недавно, у меня истек сертификат и пришлось заказывать новый и затем устанавливать на хостинг с…
Каким бы ни было ваше мнение о JavaScript, но всем известно, что работа с датами…
Все, кто следит за последними событиями в мире адаптивного дизайна, согласятся, что введение контейнерных запросов…
View Comments
Рада что в новом версии есть обновления для страницы администратора.
Спасибо. Но тут не совсем всё. Там на самом деле изменений больше. Подробней можно тут прочитать: https://djangodoc.ru/3.1/releases/3.1/