Примечания к выпуску Django 3.1

4 августа 2020 г.

Добро пожаловать в Django 3.1!

Эти примечания к выпуску охватывают новые функции , а также некоторые обратно несовместимые изменения, о которых вам следует знать при обновлении с Django 3.0 или более ранней версии. Мы удалили некоторые функции , срок действия которых подошел к концу, и начали процесс прекращения поддержки некоторых функций .

См. Руководство по обновлению Django до новой версии, если вы обновляете существующий проект.

Совместимость с Python

Django 3.1 поддерживает Python 3.6, 3.7 и 3.8. Мы настоятельно рекомендуем и официально поддерживаем только последний выпуск каждой серии.

Что нового в 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 .

  • 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

django.contrib.gis

  • relate поиск теперь поддерживается в MariaDB.
  • Добавил LinearRing.is_counterclockwise свойство.
  • AsGeoJSON теперь поддерживается в Oracle.
  • Добавлена AsWKB и AsWKT функции.
  • Добавлена ​​поддержка PostGIS 3 и GDAL 3.

django.contrib.humanize

  • intword шаблонный фильтр теперь поддерживает отрицательные целые числа.

django.contrib.postgres

django.contrib.sessions

  • Этот SESSION_COOKIE_SAMESITE параметр теперь позволяет 'None' (строковое) значение явно указывать, что файл cookie отправляется со всеми запросами на одном сайте и между сайтами.

django.contrib.staticfiles

Кэш

  • 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 отправляется со всеми запросами на одном сайте и между сайтами.

Электронная почта

Отчеты об ошибках

Файловое хранилище

  • FileSystemStorage.save() метод теперь поддерживает pathlib.Path .
  • FileField и ImageField теперь примите callable for storage . Это позволяет вам изменять используемое хранилище во время выполнения, например, выбирая разные хранилища для разных сред.

Формы

  • 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 атрибут позволяет создавать отложенные уникальные ограничения.

Пагинация

  • Paginator теперь можно повторять, чтобы получить его страницы.

Запросы и ответы

  • Если 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.

Утилиты

Разное

  • Серверная часть 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 in django.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 in django.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 и YAMLdumpdata теперь по умолчанию выгружают все данные с помощью 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 .

Функции, устаревшие в версии 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 .

  • Передача URL-адреса kwargs напрямую в контекст TemplateView не рекомендуется. view.kwargs Вместо этого укажите на них ссылку в шаблоне .

  • Передача псевдонимов необработанных столбцов 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 удалена.

Copyright ©2020 All rights reserved