Примечания к выпуску Django 3.1 ¶
4 августа 2020 г.
Добро пожаловать в Django 3.1!
Эти примечания к выпуску охватывают новые функции , а также некоторые обратно несовместимые изменения, о которых вам нужно знать при обновлении с Django 3.0 или более ранней версии. Мы отказались от некоторых функций , срок действия которых подошел к концу, и мы начали процесс прекращения поддержки некоторых функций .
См. Руководство по обновлению Django до более новой версии, если вы обновляете существующий проект.
Совместимость с Python ¶
Django 3.1 поддерживает Python 3.6, 3.7, 3.8 и 3.9 (по состоянию на 3.1.3). Мы настоятельно рекомендуем и официально поддерживаем только последний выпуск каждой серии.
Что нового в Django 3.1 ¶
Асинхронные виды и поддержка промежуточного программного обеспечения ¶
Django теперь поддерживает полностью асинхронный путь запроса, включая:
Чтобы начать работу с асинхронными представлениями, вам необходимо объявить представление, используя
:async def
async def my_view(request):
await asyncio.sleep(0.5)
return HttpResponse('Hello, async world!')
Все асинхронные функции поддерживаются независимо от того, работаете ли вы в режиме WSGI или ASGI. Однако использование асинхронного кода в режиме WSGI приведет к снижению производительности. Вы можете узнать больше о специфике в документации по поддержке асинхронного режима .
Вы можете сколько угодно смешивать асинхронные и синхронизирующие представления, промежуточное ПО и тесты. Django гарантирует, что у вас всегда будет правильный контекст выполнения. Мы ожидаем, что большинство проектов будут поддерживать большую часть своих представлений синхронно, и только некоторые из них будут работать в асинхронном режиме, но это полностью ваш выбор.
ORM Django, уровень кеширования и другие фрагменты кода, которые выполняют длительные сетевые вызовы, еще не поддерживают асинхронный доступ. Мы ожидаем добавить их поддержку в следующих выпусках. Асинхронные представления идеальны, однако, если вы выполняете много вызовов API или HTTP внутри своего представления, теперь вы можете изначально выполнять все эти HTTP-вызовы параллельно, чтобы значительно ускорить выполнение вашего представления.
Асинхронная поддержка должна быть полностью обратно совместимой, и мы постарались гарантировать, что у нее не будет снижения скорости для вашего существующего синхронного кода. Это не должно оказывать заметного влияния на существующие проекты Django.
JSONField для всех поддерживаемых баз данных ¶
Django теперь включает models.JSONField
и
forms.JSONField
может использоваться на всех поддерживаемых базах данных. Оба поля поддерживают использование пользовательских кодировщиков и декодеров JSON. Поле модели поддерживает самоанализ,
поиск и преобразования , которые ранее были доступны только для PostgreSQL:
from django.db import models
class ContactInfo(models.Model):
data = models.JSONField()
ContactInfo.objects.create(data={
'name': 'John',
'cities': ['London', 'Cambridge'],
'pets': {'dogs': ['Rufus', 'Meg']},
})
ContactInfo.objects.filter(
data__name='John',
data__pets__has_key='dogs',
data__cities__contains='London',
).delete()
Если ваш проект использует django.contrib.postgres.fields.JSONField
, а также связанное поле формы и преобразования, вам следует настроить использование новых полей, а также сгенерировать и применить миграцию базы данных. На данный момент старые поля и преобразования оставлены в качестве ссылки на новые и в этом выпуске устарели .
DEFAULT_HASHING_ALGORITHM
настройки ¶
Новая DEFAULT_HASHING_ALGORITHM
переходная настройка позволяет указать алгоритм хеширования по умолчанию, который будет использоваться для кодирования файлов cookie, токенов сброса пароля на сайте администратора, сеансов пользователей и подписей, созданных
django.core.signing.Signer
и django.core.signing.dumps()
.
Поддержка SHA-256 была добавлена в Django 3.1. Если вы обновляете несколько экземпляров одного и того же проекта до Django 3.1, вы должны установить
DEFAULT_HASHING_ALGORITHM
его 'sha1'
во время перехода, чтобы обеспечить совместимость со старыми версиями Django. Обратите внимание, что для этого требуется Django 3.1.1+. После завершения перехода на 3.1 вы можете прекратить переопределение DEFAULT_HASHING_ALGORITHM
.
Этот параметр не рекомендуется в этом выпуске, поскольку поддержка токенов, файлов cookie, сеансов и подписей, использующих алгоритм SHA-1, будет удалена в Django 4.0.
Незначительные особенности ¶
django.contrib.admin
¶
Новый
django.contrib.admin.EmptyFieldListFilter
дляModelAdmin.list_filter
позволяет фильтровать пустые значения (пустые строки и нули) в представлении списка изменений администратора.Фильтры на правой боковой панели списка изменений администратора теперь содержат ссылку для очистки всех фильтров.
У администратора теперь есть боковая панель на больших экранах для упрощения навигации. Он включен по умолчанию, но может быть отключен с помощью пользовательского
AdminSite
параметраAdminSite.enable_nav_sidebar
и значенияFalse
.Для рендеринга боковой панели требуется доступ к текущему запросу для настройки возможностей ролей CSS и ARIA. Это требует использования
'django.template.context_processors.request'
в'context_processors'
опцииOPTIONS
.Изначально пустые
extra
строки теперь можно удалить так же, как и динамически созданные.XRegExp
обновлен с версии 2.0.0 до 3.2.0.jQuery обновлен с версии 3.4.1 до 3.5.1.
Библиотека Select2 обновлена с версии 4.0.7 до 4.0.13.
django.contrib.auth
¶
- Счетчик итераций по умолчанию для хешера паролей PBKDF2 увеличен с 180000 до 216000.
- Новая
PASSWORD_RESET_TIMEOUT
настройка позволяет определить количество секунд, в течение которых действует ссылка для сброса пароля. Это рекомендуется вместо устаревшегоPASSWORD_RESET_TIMEOUT_DAYS
параметра, который будет удален в Django 4.0. - Механизм сброса пароля теперь использует алгоритм хеширования SHA-256. Поддержка токенов, использующих старый алгоритм хеширования, сохраняется до Django 4.0.
AbstractBaseUser.get_session_auth_hash()
теперь использует алгоритм хеширования SHA-256. Поддержка пользовательских сеансов, использующих старый алгоритм хеширования, сохраняется до Django 4.0.
django.contrib.contenttypes
¶
- Новая опция позволяет удалять устаревшие типы контента из ранее установленных приложений, которые были удалены из .
remove_stale_contenttypes --include-stale-apps
INSTALLED_APPS
django.contrib.gis
¶
relate
поиск теперь поддерживается в MariaDB.- Добавил
LinearRing.is_counterclockwise
свойство. AsGeoJSON
теперь поддерживается в Oracle.- Добавлена
AsWKB
иAsWKT
функции. - Добавлена поддержка PostGIS 3 и GDAL 3.
django.contrib.humanize
¶
intword
шаблонный фильтр теперь поддерживает отрицательные целые числа.
django.contrib.postgres
¶
- Новый
BloomIndex
класс позволяет создаватьbloom
индексы в базе данных. НоваяBloomExtension
операция миграции устанавливаетbloom
расширение, чтобы добавить поддержку этого индекса. get_FOO_display()
теперь поддерживаетArrayField
иRangeField
.- Новые
rangefield.lower_inc
,rangefield.lower_inf
,rangefield.upper_inc
иrangefield.upper_inf
поиски позволяют запрашивая сRangeField
помощью связанного типа. rangefield.contained_by
теперь поддерживаетSmallAutoField
,AutoField
,BigAutoField
,SmallIntegerField
, иDecimalField
.SearchQuery
теперь поддерживает'websearch'
тип поиска в PostgreSQL 11+.SearchQuery.value
теперь поддерживает выражения запросов.- Новый
SearchHeadline
класс позволяет выделять результаты поиска. search
поиск теперь поддерживает выражения запроса.- Новый
cover_density
параметрSearchRank
позволяет ранжировать по плотности покрытия. - Новый
normalization
параметрSearchRank
позволяет нормализовать ранг. - Новый
ExclusionConstraint.deferrable
атрибут позволяет создавать отложенные ограничения исключения.
django.contrib.sessions
¶
- Этот
SESSION_COOKIE_SAMESITE
параметр теперь позволяет'None'
(строковое) значение явно указывать, что файл cookie отправляется со всеми запросами на одном сайте и между сайтами.
django.contrib.staticfiles
¶
- Теперь
STATICFILES_DIRS
настройка поддерживаетсяpathlib.Path
.
Кэш ¶
cache_control()
Декоратор иpatch_cache_control()
метод теперь поддерживают несколько имен полей вno-cache
директиве дляCache-Control
заголовка, в соответствии сRFC 7234 # section-5.2.2.2 .delete()
now возвращается,True
если ключ был успешно удален, вFalse
противном случае.
CSRF ¶
- Этот
CSRF_COOKIE_SAMESITE
параметр теперь позволяет'None'
(строковое) значение явно указывать, что файл cookie отправляется со всеми запросами на одном сайте и между сайтами.
Электронная почта ¶
- Параметр
EMAIL_FILE_PATH
, используемый серверной частью электронной почты для файлов , теперь поддерживаетpathlib.Path
.
Отчеты об ошибках ¶
django.views.debug.SafeExceptionReporterFilter
теперь фильтрует конфиденциальные значения изrequest.META
отчетов об исключениях.- Новые
SafeExceptionReporterFilter.cleansed_substitute
иSafeExceptionReporterFilter.hidden_settings
атрибуты позволяют настраивать чувствительные настройки иrequest.META
фильтрацию в отчетах исключений. - Техническое представление отладки 404 теперь учитывает
DEFAULT_EXCEPTION_REPORTER_FILTER
при применении фильтрации настроек. - Новое
DEFAULT_EXCEPTION_REPORTER
позволяет предоставитьdjango.views.debug.ExceptionReporter
подкласс для настройки генерации отчетов об исключениях. См. Подробности в разделе Пользовательские отчеты об ошибках.
Файловое хранилище ¶
FileSystemStorage.save()
метод теперь поддерживаетpathlib.Path
.FileField
иImageField
теперь примите callable forstorage
. Это позволяет вам изменять используемое хранилище во время выполнения, например, выбирая разные хранилища для разных сред.
Формы ¶
ModelChoiceIterator
, используемыйModelChoiceField
иModelMultipleChoiceField
, теперь используетModelChoiceIteratorValue
то, что может использоваться виджетами для доступа к экземплярам модели. См. Подробности в разделе « Итерация выбора отношений».django.forms.DateTimeField
теперь принимает даты в подмножестве ISO 8601 форматов даты и времени, в том числе дополнительного часового пояса, например2019-10-10T06:47
,2019-10-10T06:47:23+04:00
, или2019-10-10T06:47:23Z
. Часовой пояс всегда будет сохранен, если он указан, а даты и время с учетом часового пояса будут возвращены, даже еслиUSE_TZ
естьFalse
.Кроме того,
DateTimeField
теперь используетсяDATE_INPUT_FORMATS
в дополнение кDATETIME_INPUT_FORMATS
при преобразовании ввода поля вdatetime
значение.MultiWidget.widgets
теперь принимает словарь, который позволяет настраиватьname
атрибуты подвиджета .Новое
BoundField.widget_type
свойство можно использовать для динамической настройки отрисовки формы в зависимости от типа виджета.
Интернационализация ¶
- Этот
LANGUAGE_COOKIE_SAMESITE
параметр теперь позволяет'None'
(строковое) значение явно указывать, что файл cookie отправляется со всеми запросами на одном сайте и между сайтами. - Добавлена поддержка и переводы для алжирского арабского, игбо, кыргызского, таджикского и туркменского языков.
Команды управления ¶
- Новая опция позволяет указать псевдонимы базы данных для запуска системных проверок. Ранее эти проверки были включены для всех, настроенных путем передачи
тега команде.
check --database
database
DATABASES
database
- Новая опция заставляет команду завершать работу с ненулевым статусом при обнаружении непримененных миграций.
migrate --check
- Новый
returncode
аргумент дляCommandError
позволяет настроить статус выхода для команд управления. - Новая опция позволяет передавать дополнительные аргументы клиенту командной строки для базы данных.
dbshell -- ARGUMENTS
- В
flush
иsqlflush
команды в настоящее время включают SQL - последовательностей для сброса на SQLite.
Модели ¶
- Новая
ExtractIsoWeekDay
функция извлекает дни недели ISO-8601 изDateField
иDateTimeField
, а новыйiso_week_day
поиск позволяет запрашивать дни недели ISO-8601. QuerySet.explain()
теперь поддерживает:TREE
формат в MySQL 8.0.16+,analyze
вариант в MySQL 8.0.18+ и MariaDB.
- Добавлен,
PositiveBigIntegerField
который действует так же, как a,PositiveIntegerField
за исключением того, что допускает значения только в пределах определенного (зависящего от базы данных) предела. Значения от0
до9223372036854775807
безопасны во всех базах данных, поддерживаемых Django. - Новая
RESTRICT
опция дляon_delete
аргументаForeignKey
иOneToOneField
имитирует поведение ограничения SQL .ON DELETE RESTRICT
CheckConstraint.check
теперь поддерживает логические выражения.- В
RelatedManager.add()
,create()
иset()
методы теперь принимают в качестве значений вызываемых объектов вthrough_defaults
аргументе. - Новый
is_dst
параметрQuerySet.datetimes()
определяет обработку несуществующих и неоднозначных дат. - Новый метод
F
выраженияbitxor()
допускает побитовую операцию XOR . QuerySet.bulk_create()
теперь устанавливает первичный ключ для объектов при использовании MariaDB 10.5+.- Этот
DatabaseOperations.sql_flush()
метод теперь генерирует более эффективный SQL в MySQL, используяDELETE
вместоTRUNCATE
операторов для таблиц, которые не требуют сброса последовательностей. - Функции SQLite теперь помечены как
deterministic
в Python 3.8+. Это позволяет использовать их в проверочных ограничениях и частичных индексах. - Новый
UniqueConstraint.deferrable
атрибут позволяет создавать отложенные уникальные ограничения.
Запросы и ответы ¶
- Если
ALLOWED_HOSTS
пусто иDEBUG=True
, теперь вHost
заголовке разрешены поддомены localhost , напримерstatic.localhost
. HttpResponse.set_cookie()
иHttpResponse.set_signed_cookie()
теперь разрешите использованиеsamesite='None'
(string), чтобы явно указать, что файл cookie отправляется со всеми запросами на одном сайте и между сайтами.- Новый
HttpRequest.accepts()
метод возвращает, принимает ли запрос данный тип MIME в соответствии сAccept
заголовком HTTP.
Безопасность ¶
Теперь
SECURE_REFERRER_POLICY
настройка по умолчанию'same-origin'
. При такой настройкеSecurityMiddleware
задает заголовок политики реферера дляsame-origin
всех ответов, которые его еще не имеют. Это предотвращаетReferer
отправку заголовка в другие источники. Если вам нужно предыдущее поведение, явно установитеSECURE_REFERRER_POLICY
значениеNone
.Алгоритм по умолчанию
django.core.signing.Signer
,django.core.signing.loads()
иdjango.core.signing.dumps()
изменен на SHA-256. Поддержка подписей, сделанных с помощью старого алгоритма SHA-1, сохраняется до Django 4.0.Также новый
algorithm
параметрSigner
позволяет настроить алгоритм хеширования.
Шаблоны ¶
- Переименованные теги
translate
иblocktranslate
теги шаблона вводятся для интернационализации в коде шаблона. Псевдонимы старыхtrans
иblocktrans
шаблонных тегов продолжают работать и будут сохранены в обозримом будущем. include
Шаблонный тег теперь принимает итерируемые имен шаблонов.
Тесты ¶
SimpleTestCase
теперь реализуетdebug()
метод, позволяющий запускать тест без сбора результатов и перехвата исключений. Это можно использовать для поддержки запуска тестов в отладчике.- Новая
MIGRATE
настройка тестовой базы данных позволяет отключить миграции во время создания тестовой базы данных. - Средство выполнения тестов Django теперь поддерживает возможность отмены вывода при прохождении тестов.
test --buffer
DiscoverRunner
теперь пропускает запуск системных проверок для баз данных, на которые не ссылаются тесты .TransactionTestCase
Разборка MySQL теперь выполняется быстрее из-заflush
улучшений команд. В качестве побочного эффекта последний больше не сбрасывает автоматически последовательности при разрыве. Включите,TransactionTestCase.reset_sequences
если для ваших тестов требуется эта функция.
URL-адреса ¶
- Конвертеры Путь теперь можно поднять
ValueError
вto_url()
не указать ни одного совпадения при движении задним ходом URL.
Утилиты ¶
filepath_to_uri()
теперь поддерживаетpathlib.Path
.parse_duration()
теперь поддерживает разделители запятых для десятичных дробей в формате ISO 8601.parse_datetime()
,parse_duration()
Иparse_time()
теперь поддерживают запятые для миллисекунд.
Разное ¶
- Серверная часть SQLite теперь поддерживает
pathlib.Path
этуNAME
настройку. settings.py
Генерируетсяstartproject
команда теперь используетpathlib.Path
вместоos.path
построения путей файловой системы.- Теперь этот
TIME_ZONE
параметр разрешен в базах данных, поддерживающих часовые пояса.
Обратно несовместимые изменения в 3.1 ¶
API серверной части базы данных ¶
В этом разделе описаны изменения, которые могут потребоваться в сторонних серверах баз данных.
DatabaseOperations.fetch_returned_insert_columns()
теперь требуется дополнительныйreturning_params
аргумент.connection.timezone
Свойство теперь'UTC'
по умолчанию, илиTIME_ZONE
когдаUSE_TZ
естьTrue
в базах данных, время поддержки зон. Раньше это былоNone
в базах данных, поддерживающих часовые пояса.connection._nodb_connection
свойство изменено наconnection._nodb_cursor()
метод и теперь возвращает диспетчер контекста, который создает курсор и автоматически закрывает курсор и соединение при выходе изwith
оператора.DatabaseClient.runshell()
теперь требуется дополнительныйparameters
аргумент в виде списка дополнительных аргументов для передачи клиенту командной строки.sequences
Позиционная аргументDatabaseOperations.sql_flush()
заменяется булевой ключевое слово только аргументreset_sequences
. ЕслиTrue
, то последовательности усеченных таблиц будут сброшены.allow_cascade
АргументDatabaseOperations.sql_flush()
теперь ключевое слово только аргумент.using
Позиционной аргументDatabaseOperations.execute_sql_flush()
удаляется. Теперь метод использует базу данных вызываемого экземпляра.- Сторонние серверные части баз данных должны реализовать поддержку
JSONField
или установитьDatabaseFeatures.supports_json_field
дляFalse
. Если хранение примитивов не поддерживается, установитеDatabaseFeatures.supports_primitives_in_json_field
значениеFalse
. Если существует истинный тип данных для JSON, установитеDatabaseFeatures.has_native_json_field
значениеTrue
. Еслиjsonfield.contains
иjsonfield.contained_by
не поддерживаются, установитеDatabaseFeatures.supports_json_field_contains
значениеFalse
. - Третьи В качестве базы данных партии должны осуществлять самоанализ для
JSONField
или набораcan_introspect_json_field
вFalse
.
Прекращена поддержка MariaDB 10.1 ¶
Предварительная поддержка MariaDB 10.1 заканчивается в октябре 2020 года. Django 3.1 поддерживает MariaDB 10.2 и выше.
contrib.admin
поддержка браузера ¶
Администратор больше не поддерживает устаревший браузер Internet Explorer. Подробную информацию о поддерживаемых браузерах см. В разделе часто задаваемых вопросов администратора .
AbstractUser.first_name
max_length
увеличена до 150 ¶
Перенос для django.contrib.auth.models.User.first_name
включен. Если у вас есть настраиваемая пользовательская модель, наследующая от AbstractUser
, вам необходимо создать и применить миграцию базы данных для вашей пользовательской модели.
Если вы хотите сохранить ограничение в 30 символов для имен, используйте настраиваемую форму:
from django import forms
from django.contrib.auth.forms import UserChangeForm
class MyUserChangeForm(UserChangeForm):
first_name = forms.CharField(max_length=30, required=False)
Если вы хотите сохранить это ограничение в админке при редактировании пользователей, установите
UserAdmin.form
для использования эту форму:
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
class MyUserAdmin(UserAdmin):
form = MyUserChangeForm
admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)
Разное ¶
- Ключи кеша, используемые
cache
и генерируемые имmake_template_fragment_key()
, отличаются от ключей, созданных более старыми версиями Django. После обновления до Django 3.1 первым запросом к любому ранее кэшированному фрагменту шаблона будет промах в кеше. - Логика, лежащая в основе решения вернуть резервное перенаправление или ответ HTTP 204 из
set_language()
представления, теперь основана наAccept
заголовке HTTP, а не наX-Requested-With
наличии заголовка HTTP. - Импорт совместности
django.core.exceptions.EmptyResultSet
вdjango.db.models.query
,django.db.models.sql
иdjango.db.models.sql.datastructures
удаляются. - Импорт совместимости
django.core.exceptions.FieldDoesNotExist
indjango.db.models.fields
удален. - Импорт совместимости из
django.forms.utils.pretty_name()
иdjango.forms.boundfield.BoundField
вdjango.forms.forms
удаляется. - Импорт совместимости
Context
,ContextPopException
иRequestContext
вdjango.template.base
удаляются. - Импорт совместимости
django.contrib.admin.helpers.ACTION_CHECKBOX_NAME
indjango.contrib.admin
удален. - Параметры
STATIC_URL
иMEDIA_URL
, заданные для относительных путей, теперь имеют префикс предоставленного сервером значенияSCRIPT_NAME
(или,/
если он не установлен). Это изменение не должно влиять на настройки, установленные для действительных URL-адресов или абсолютных путей. ConditionalGetMiddleware
больше не добавляетETag
заголовок к ответам с пустымcontent
.django.utils.decorators.classproperty()
decorator становится общедоступным и перемещается вdjango.utils.functional.classproperty()
.floatformat
шаблонный фильтр теперь выводит (положительный)0
для отрицательных чисел, которые округляются до нуля.Meta.ordering
аMeta.unique_together
параметры моделей вdjango.contrib
модулях, которые раньше были кортежами, теперь являются списками.- Виджет календаря администратора теперь обрабатывает двузначные годы в соответствии со спецификацией Open Group, т.е. значения от 69 до 99 сопоставлены с предыдущим столетием, а значения от 0 до 68 сопоставлены с текущим столетием.
- Форматы только для даты удалены из списка по умолчанию для
DATETIME_INPUT_FORMATS
. - Не
FileInput
виджет больше не делает сrequired
атрибутом HTML , когда существует исходные данные. - Недокументированный
django.views.debug.ExceptionReporterFilter
класс удаляется. В соответствии с документацией по пользовательским отчетам об ошибках классы, которые будут использоваться сDEFAULT_EXCEPTION_REPORTER_FILTER
необходимостью наследованияdjango.views.debug.SafeExceptionReporterFilter
. - Тайм-аут кеширования, установленный
cache_page()
декоратором, теперь имеет приоритет надmax-age
директивой изCache-Control
заголовка. ForeignKey.to_field
Теперь возникает вопрос о добавлении нелокального удаленного поля в аргументFieldError
.SECURE_REFERRER_POLICY
теперь по умолчанию'same-origin'
. Дополнительные сведения см. В разделе «Новые возможности безопасности» выше.check
Команда управления теперь запускаетdatabase
системные проверки только для псевдонимов базы данных, указанных с помощью option.check --database
migrate
Команда управления теперь запускаетdatabase
системные проверки только для базы данных, которую нужно перенести.- Классы администратора CSS
row1
иrow2
удаляются в пользу:nth-child(odd)
и:nth-child(even)
псевдо-классов. - Теперь
make_password()
функция требует, чтобы ее аргумент был строкой или байтами. Другие типы должны быть явно приведены к одному из них. - Недокументированный
version
параметрAsKML
функции удаляется. - Используемые ими
сериализаторы JSON и YAML
dumpdata
теперь по умолчанию выгружают все данные с помощью Unicode. Если вам нужно предыдущее поведение, перейдитеensure_ascii=True
к сериализатору JSON илиallow_unicode=False
сериализатору YAML. - Автоперезагрузчик больше не отслеживает изменения во встроенных файлах перевода Django.
- Минимальная поддерживаемая версия
mysqlclient
увеличена с 1.3.13 до 1.4.0. - Недокументированные
django.contrib.postgres.forms.InvalidJSONInput
иdjango.contrib.postgres.forms.JSONString
перемещены вdjango.forms.fields
. - Недокументированный
django.contrib.postgres.fields.jsonb.JsonAdapter
класс удаляется. - Не тег и
фильтр больше не уважать настройки.
{% localize off %}
unlocalize
DECIMAL_SEPARATOR
- Минимальная поддерживаемая версия
asgiref
увеличена с 3.2 до 3.2.10. - Класс Media теперь отображает
<script>
теги безtype
атрибута, чтобы следовать рекомендациям WHATWG . ModelChoiceIterator
, используемыйModelChoiceField
иModelMultipleChoiceField
, теперь дает выбор из двух кортежей, содержащийModelChoiceIteratorValue
экземпляры в качестве первогоvalue
элемента в каждом выборе. В большинстве случаев это прокси прозрачно, но если вам нужно самоfield
значение, используйтеModelChoiceIteratorValue.value
вместо этого атрибут.
Функции, устаревшие в версии 3.1 ¶
PostgreSQL JSONField
¶
django.contrib.postgres.fields.JSONField
и
django.contrib.postgres.forms.JSONField
устарели в пользу
models.JSONField
и
forms.JSONField
.
Недокументированные django.contrib.postgres.fields.jsonb.KeyTransform
и
django.contrib.postgres.fields.jsonb.KeyTextTransform
также устарели в пользу преобразований в django.db.models.fields.json
.
Новые JSONField
символы s, KeyTransform
и KeyTextTransform
могут использоваться на всех поддерживаемых серверных ВМ базах данных.
Разное ¶
PASSWORD_RESET_TIMEOUT_DAYS
установка устарела в пользуPASSWORD_RESET_TIMEOUT
.Недокументированное использование
isnull
поиска с не-логическими значениями в правой части не рекомендуется, используйтеTrue
илиFalse
вместо них.Недокументированный
django.db.models.query_utils.InvalidQuery
класс исключений устарел в пользуFieldDoesNotExist
иFieldError
.Точка
django-admin.py
входа устарела в пользуdjango-admin
.Этот
HttpRequest.is_ajax()
метод устарел, поскольку он полагался на специфичный для jQuery способ обозначения вызовов AJAX, в то время как текущее использование имеет тенденцию использовать JavaScript Fetch API . В зависимости от вашего варианта использования вы можете написать свой собственный метод обнаружения AJAX или использовать новыйHttpRequest.accepts()
метод, если ваш код зависит от клиентскогоAccept
HTTP-заголовка.Если вы пишете свой собственный метод обнаружения AJAX, он
request.is_ajax()
может быть воспроизведен точно так же, как .request.headers.get('x-requested-with') == 'XMLHttpRequest'
Передача
None
в качестве первого аргументаdjango.utils.deprecation.MiddlewareMixin.__init__()
устарела.Используемый формат кодирования значений файлов cookie
CookieStorage
отличается от формата, создаваемого более старыми версиями Django. Поддержка старого формата сохраняется до Django 4.0.Формат кодирования сеансов отличается от формата, создаваемого более старыми версиями Django. Поддержка старого формата сохраняется до Django 4.0.
Чисто документальный
providing_args
аргумент дляSignal
не рекомендуется. Если вы полагаетесь на этот аргумент как на документацию, вы можете переместить текст в комментарий кода или строку документации.Вызов
django.utils.crypto.get_random_string()
безlength
аргумента устарел.list
Сообщение дляModelMultipleChoiceField
осуждается в пользуinvalid_list
.Передача псевдонимов необработанных столбцов в
QuerySet.order_by()
не рекомендуется. Тот же результат может быть достигнут, еслиRawSQL
вместо этого заранее передать псевдонимы в .Поле
NullBooleanField
модели устарело и заменено наBooleanField(null=True)
.django.conf.urls.url()
псевдонимdjango.urls.re_path()
устарел.В и шаблонные теги являются устаревшими в пользу . охватывает все варианты использования, но если вам нужно продолжать использовать эти теги, их можно извлечь из Django в модуль и включить в качестве встроенного тега в параметр в .
{% ifequal %}
{% ifnotequal %}
{% if %}
{% if %}
'builtins'
OPTIONS
DEFAULT_HASHING_ALGORITHM
переходная настройка устарела.
Функции, удаленные в 3.1 ¶
Эти функции достигли конца цикла устаревания и удалены в Django 3.1.
Подробную информацию об этих изменениях, в том числе о том, как отменить использование этих функций, см. В разделе « Функции, не рекомендуемые в версии 2.2» .
django.utils.timezone.FixedOffset
устранен.django.core.paginator.QuerySetPaginator
устранен.- Модель
Meta.ordering
не влияет на запросы.GROUP BY
django.contrib.postgres.fields.FloatRangeField
иdjango.contrib.postgres.forms.FloatRangeField
удаляются.FILE_CHARSET
Установка удаляется.django.contrib.staticfiles.storage.CachedStaticFilesStorage
устранен.RemoteUserBackend.configure_user()
Метод требует вrequest
качестве первого позиционного аргумента.- Поддержка
SimpleTestCase.allow_database_queries
иTransactionTestCase.multi_db
удалена.