Примечания к выпуску Django 1.11 ¶
4 апреля 2017 г.
Добро пожаловать в Django 1.11!
Эти примечания к выпуску охватывают новые функции , а также некоторые несовместимые с предыдущими версиями изменения, о которых следует помнить при обновлении с Django 1.10 или более ранней версии. Мы начали процесс отказа от некоторых функций .
См. « Обновление Django до новой версии», если вы обновляете существующий проект.
Django 1.11 обозначен как выпуск с долгосрочной поддержкой . Он будет получать обновления безопасности в течение как минимум трех лет после выпуска. Поддержка предыдущего LTS, Django 1.8, прекратится в апреле 2018 года.
Совместимость с Python ¶
Django 1.11 требует Python 2.7, 3.4, 3.5, 3.6 или 3.7 (по состоянию на 1.11.17). Мы настоятельно рекомендуем и официально поддерживаем только последний выпуск каждой серии.
Серия Django 1.11.x является последней, поддерживающей Python 2. Следующий основной выпуск, Django 2.0, будет поддерживать только Python 3.4+.
Предупреждения об устаревании больше не отображаются по умолчанию ¶
В отличие от предыдущих версий Django, предупреждения об устаревании, выдаваемые Django, больше не отображаются по умолчанию. Это соответствует поведению Python по умолчанию.
Это изменение позволяет сторонним приложениям поддерживать версии Django 1.11 LTS и Django 1.8 LTS без необходимости добавления кода, чтобы избежать предупреждений об устаревании.
После выпуска Django 2.0 мы предлагаем, чтобы сторонние приложения больше не поддерживали версии Django старше 1.11. На этом этапе вы должны иметь возможность запускать тесты для своего проекта с помощью python -Wd, чтобы вывести предупреждения об устаревании. После их исправления ваше приложение должно быть совместимо с Django 2.0.
Что нового в Django 1.11 ¶
Индекс модели на основе классов ¶
Новый модуль django.db.models.indexes
содержит классы, упрощающие создание индексов базы данных. Эти индексы можно добавлять к моделям с помощью опции Meta.indexes
.
Класс Index
создает индекс b-дерева, как если бы вы указали параметр db_index
в поле модели или index_together
в классе Meta
модели. Его можно унаследовать для поддержки различных типов индексов, например GinIndex
. Он также позволяет вам определять сортировку (ASC / DESC) для столбцов индекса.
Рендеринг HTML-компонентов на основе шаблонов ¶
Чтобы упростить настройку компонентов HTML-форм, их отрисовка теперь выполняется через систему шаблонов, а не в коде Python. См. API отрисовки форм .
Возможно, вам придется адаптировать пользовательские компоненты, которые вы написали, из-за некоторых изменений , не имеющих обратной совместимости .
Выражения Subquery
¶
Новые выражения базы данных Subquery
и Exists
позволяют создавать явные подзапросы. Подзапросы могут ссылаться на поля родительского запроса с классом OuterRef
.
Незначительные особенности ¶
django.contrib.admin
¶
ModelAdmin.date_hierarchy
теперь может ссылаться на поля за пределами отношений.- Новая точка входа
ModelAdmin.get_exclude()
позволяет вам указать поля для исключения на основе запроса или экземпляра модели. - Теперь шаблон
popup_response.html
может быть перегружен приложением, моделью или установкой атрибутаModelAdmin.popup_response_template
.
django.contrib.auth
¶
- Количество итераций по умолчанию для хэша пароля PBKDF2 увеличено на 20%.
- Класс просматривает
LoginView
иLogoutView
заменяет устаревшие функции представленияlogin()
иlogout()
. - Взгляды классов
PasswordChangeView
,PasswordChangeDoneView
,PasswordResetView
,PasswordResetDoneView
,PasswordResetConfirmView
иPasswordResetCompleteView
заменить устаревшие взгляды функцииpassword_change()
,password_change_done()
,password_reset()
,password_reset_done()
,password_reset_confirm()
иpassword_reset_complete()
. - Новый атрибут
post_reset_login
изPasswordResetConfirmView
автоматического входа пользователя после успешного сброса пароля. ЕслиAUTHENTICATION_BACKENDS
настроено несколько механизмов , укажите, какой из них будет использоваться, задав атрибутpost_reset_login_backend
. - Чтобы избежать возможности раскрытия токена сброса пароля HTTP-заголовком Referer (например, если страница сброса содержит ссылки на файлы CSS или JavaScript, размещенные в других доменах), представление
PasswordResetConfirmView
(но не представление устаревшей функцииpassword_reset_confirm()
) сохраняет токен в сеансе и перенаправляет на себя, чтобы представить пользователю форму изменения пароля без необходимости включать токен в URL-адрес. update_session_auth_hash()
Теперь вращает ключ сеанса, чтобы разрешить изменение пароля для аннулирования украденных файлов cookie сеанса.- Новый атрибут
success_url_allowed_hosts
вLoginView
иLogoutView
используется для обозначения набора узлов , которые являются надежными для перенаправления после подключения или отключения. help_text
Добавлен справочный контент для валидаторов паролей дляUserCreationForm
.- Теперь запрос
HttpRequest
передается,authenticate()
который, в свою очередь, передает его механизму аутентификации, если последний принимает параметрrequest
. - Теперь сигнал
user_login_failed()
получает параметрrequest
. PasswordResetForm
поддерживает настраиваемые пользовательские шаблоны, в которых используется поле адреса электронной почты с именем, отличным от'email'
. УстановитеCustomUser.EMAIL_FIELD
значение соответствующего имени поля.get_user_model()
теперь можно вызывать во время импорта даже в модулях, определяющих модели.
django.contrib.contenttypes
¶
- Когда в порядке будут обнаружены устаревшие типы контента
remove_stale_contenttypes
, вы увидите список связанных объектов, которые также будут удалены, напримерauth.Permission
. Раньше перечислялись только типы контента (и это приглашение появлялось после,migrate
а не как отдельная команда).
django.contrib.gis
¶
- Новые методы
GEOSGeometry.from_gml()
иOGRGeometry.from_gml()
позволяют создавать геометрические объекты из формата GML. dwithin
Для SpatiaLite добавлена поддержка поискового выражения .- Функции
Area
и,Distance
а также запросы расстояния теперь также работают на SpatiaLite с геодезическими координатами. - В OpenLayers-форме виджеты теперь используют
OpenLayers.js
изhttps://cdnjs.cloudflare.com
которого является более подходящим для использования в производстве , чем старыйhttps://openlayers.org/
источник. Они также обновлены для использования OpenLayers 3. - При миграции PostGIS теперь можно изменять размеры полей.
- Добавлена Возможность проходить
size
,shape
иoffset
параметры при созданииGDALRaster
объектов. - Добавлена поддержка функций SpatiaLite,
IsValid
аMakeValid
также поискового выраженияisvalid
. - Добавлена поддержка Oracle для функций
AsGML
,BoundingCircle
аIsValid
также поискового выраженияisvalid
.
django.contrib.postgres
¶
- Новый параметр
distinct
изStringAgg
определяет , будут ли сцепленные значения будут различны. - Новые классы
GinIndex
иBrinIndex
позволяют создавать индексы типаGIN
иBRIN
в базе данных. JSONField
принимает новый параметрencoder
для определения настраиваемого класса, который заботится о кодировании типов данных, не поддерживаемых стандартным кодировщиком.- Класс mixin
CIText
и операция миграцииCITextExtension
являются новыми и позволяют использовать расширениеcitext
PostgreSQL для запросов без учета регистра. Предусмотрено три поля:CICharField
,CIEmailField
иCITextField
. - Новая функция
JSONBAgg
позволяет агрегировать значения в виде массива JSON. - Поле шаблона и поле
HStoreField
формыHStoreField
используются для хранения нулевых значений.
Кэш ¶
- Механизмы Memcached теперь передают содержимое
OPTIONS
названных параметров производителям клиентов, что позволяет более точно контролировать поведение клиентов. Примеры см. В документации по настройкам кеша . - Механизмы Memcached теперь позволяют определять несколько серверов в виде строки, разделенной запятыми
LOCATION
, для удобства сторонних служб, которые используют такие строки в переменных среды.
CSRF ¶
- Установка
CSRF_USE_SESSIONS
была добавлена , чтобы позволить CSRF токен хранить в сессии пользователей , а не в куки.
Ядра баз данных ¶
- Параметр
skip_locked
был добавлен вQuerySet.select_for_update()
PostgreSQL 9.5+ и Oracle для выполнения запросов .FOR UPDATE SKIP LOCKED
- Установка
TEST['TEMPLATE']
была добавлена , чтобы позволить пользователям PostgreSQL указать шаблон , из которого создается база данных испытаний. QuerySet.iterator()
теперь использует курсоры на стороне сервера с PostgreSQL. Эта функция передает часть нагрузки на память (используемую для хранения результатов запроса) в базу данных и может увеличить использование памяти базы данных.- Для
'isolation_level'
MySQL теперь поддерживается опция,OPTIONS
позволяющая устанавливать уровень изоляции транзакции . Чтобы избежать возможной потери данных, рекомендуется отклониться от уровня MySQL по умолчанию, «повторяемое чтение», и переключиться на «чтение зафиксировано». cx_Oracle
Добавлена поддержка версии 5.3.
Электронная почта ¶
- Этот параметр
EMAIL_USE_LOCALTIME
был добавлен, чтобы разрешить отправку заголовков дат SMTP в местном часовом поясе, а не в формате UTC. EmailMessage.attach()
иattach_file()
теперь возвращаемся к MIME-типу application / octet-stream, когда для вложения text / * указан двоичный контент, который не может быть декодирован как UTF-8 .
Файловое хранилище ¶
- Для того, чтобы сделать его воплощено в
io.TextIOWrapper
, вFile
настоящее время имеетreadable()
,writable()
и методуseekable()
.
Формы ¶
- Новый атрибут
CharField.empty_value
используется для определения значения Python для представления «пустого» значения. - Новый метод
Form.get_initial_for_field()
возвращает исходные данные поля формы.
Интернационализация ¶
- Форматирование и настройка чисел
NUMBER_GROUPING
поддерживает группировку неоднородных цифр.
Команды администрирования ¶
- Новая опция позволяет исключить модели и приложения при загрузке данных по снимкам.
loaddata --exclude
- Новая опция позволяет вам определить модуль настройки, отличный от модуля Django по умолчанию для сравнения.
diffsettings --default
- Теперь настройки
app_label
ограничивают вывод файлов .showmigrations --plan
Миграции ¶
uuid.UUID
Добавлена поддержка сериализации объектов .
Модели ¶
- Поддержка исполняемых значений было добавлено в параметре
defaults
изQuerySet.update_or_create()
иget_or_create()
. ImageField
теперь естьvalidate_image_file_extension
валидатор по умолчанию . (Этот валидатор перемещен в поле формы в Django 1.11.2 .)- Добавлена поддержка усечения времени в
Trunc
функциях. - Добавлена
ExtractWeek
функция для выписки из неделиDateField
иDateTimeField
и выставил ее черезweek
поиск. - Добавлена
TruncTime
функция усеченияDateTimeField
его компонента времени и представлена вtime
поиске. - Выражения теперь возможны в
QuerySet.values()
иvalues_list()
. range
Добавлена поддержка выражений запросов при поиске, которые принимают несколько параметров, например ,.- Теперь можно использовать опцию
unique=True
сFileField
. - Параметры
nulls_first
иnulls_last
были добавлены вExpression.asc()
иdesc()
для управления сортировкой нулевых значений. - Новые
bitleftshift()
и методыbitrightshift()
этого выраженияF
позволяют операции побитового сдвига . - В
QuerySet.union()
,intersection()
и методы ,difference()
которые были добавлены.
Запросы и ответы ¶
QueryDict.fromkeys()
был добавлен.CommonMiddleware
теперь определяет заголовокContent-Length
для ответов, которые не относятся к типу stream.SECURE_HSTS_PRELOAD
Была добавлена настройка, позволяющая добавить директивуpreload
в заголовокStrict-Transport-Security
.ConditionalGetMiddleware
теперь добавляет заголовокETag
к ответам.
Сериализация ¶
- Новый атрибут
django.core.serializers.base.Serializer.stream_class
позволяет подклассам настраивать поток по умолчанию. - Кодер используется сериализатором JSON теперь может быть настроена путем передачи имени параметра
cls
функцииserializers.serialize()
. DjangoJSONEncoder
теперь может сериализовать объектыtimedelta
(используемыеDurationField
).
Шаблоны ¶
mark_safe()
теперь можно использовать как декоратор.- Механизм шаблонов
Jinja2
теперь принимает обработчики контекста, задав параметр'context_processors'
вOPTIONS
. - Тег
regroup
теперь возвращаетnamedtuple
словари вместо словарей, что позволяет напрямую расширять групповой объект в цикле, например. ,{% for grouper, list in regrouped %}
- Тег шаблона
resetcycle
был добавлен, чтобы позволить сбросить последовательность тега шаблонаcycle
. - Теперь можно определить отдельные каталоги для
filesystem.Loader
человека.
Тесты ¶
DiscoverRunner.get_test_runner_kwargs()
был добавлен, чтобы разрешить настройку именованных параметров, передаваемых средству выполнения тестов.- Опция была добавлена для устранения неудачных испытаний, установив параметр в .
test --debug-mode
DEBUG
True
- Новые функции
django.test.utils.setup_databases()
(перенесены изdjango.test.runner
) иteardown_databases()
облегчают постройку собственных тестовых пусковых установок. unittest.TestCase.subTest()
При использовании этой опции добавлена поддержка подтестов .test --parallel
DiscoverRunner
теперь запускает системные проверки при запуске тестов. Перегрузите метод,DiscoverRunner.run_checks()
если вы хотите отключить это поведение.
Валидаторы ¶
- Новые валидаторы
FileExtensionValidator
иvalidate_image_file_extension
позволяют соответственно проверять расширения файлов и файлы изображений.
Изменения несовместимы со старыми версиями в Django 1.11 ¶
django.contrib.gis
¶
- Чтобы упростить кодовую базу и поскольку теперь его проще установить, чем когда
contrib.gis
он был представлен, GDAL теперь является обязательной зависимостью GeoDjango. В предыдущих версиях это требовалось только с SQLite. contrib.gis.maps
удален, поскольку он взаимодействует с устаревшей версией API Карт Google и, похоже, не поддерживается. Если вы его используете, дайте нам знать .- Оператор равенства
GEOSGeometry
теперь также сравнивается с SRID. - Компоненты форм, основанные на OpenLayers, теперь используют OpenLayers 3. Шаблоны
gis/openlayers.html
иgis/openlayers-osm.html
были обновлены. Проверьте свой код, если вы наследуете эти компоненты или расширяете их шаблон. Кроме того, новые компоненты работают немного иначе, чем старые. Вместо того, чтобы отображать панель инструментов на дисплее, щелкните, чтобы начать рисование, щелкните-перетащите, чтобы переместить карту, и щелкните-перетащите точку / край / угол, чтобы переместить его. - Поддержка SpatiaLite <4.0 прекращена.
- Поддержка GDAL 1.7 и 1.8 прекращена.
- Компоненты Forms в администрировании
contrib.gis.forms.widgets
иOpenLayersWidget
администрировании используют API-интерфейс Forms Renderer вместоloader.render_to_string()
. Если вы используете шаблон настраиваемого компонента, вы должны быть уверены, что средство визуализации форм может его найти. Например, можно использовать моторTemplatesSetting
.
django.contrib.staticfiles
¶
collectstatic
теперь может завершиться сбоем во время пост-обработки с хешированным хранилищем статических файлов, если существует перекрестная ссылка (например,'foo.css'
ссылка, на'bar.css'
которую сама ссылается'foo.css'
) или если цепочка файлов, ссылающаяся на другие файлы, слишком глубока, чтобы разрешить ее за несколько минут проходит. В последнем случае увеличьте количество проходов, установивManifestStaticFilesStorage.max_post_process_passes
.- При использовании
ManifestStaticFilesStorage
статических файлов, не найденных в манифесте во время выполнения, теперь выдается исключениеValueError
вместо возврата неизмененного пути. Вы можете вернуться к старому поведению, установивManifestStaticFilesStorage.manifest_strict
значениеFalse
.
API ядра СУБД ¶
В этом разделе описаны изменения, которые могут потребоваться в сторонних ядрах баз данных.
DatabaseOperations.time_trunc_sql()
Был добавлен метод обработки усеченияTimeField
. Он принимает параметрыlookup_type
иfield_name
возвращает соответствующий код SQL для усечения поля времениfield_name
до объекта времени, ограниченного запрошенной частицей. Параметрlookup_type
может быть'hour'
,'minute'
или'second'
.DatabaseOperations.datetime_cast_time_sql()
Был добавлен метод обработки поискового выраженияtime
. Он принимает параметрыfield_name
иtzname
возвращает соответствующий код SQL, чтобы привести значение даты / времени к значению времени.- Чтобы включить поддержку , установите .
FOR UPDATE SKIP LOCKED
DatabaseFeatures.has_select_for_update_skip_locked = True
- Новый
DatabaseFeatures.supports_index_column_ordering
атрибут указывает, позволяет ли база данных определять порядок столбцов в индексах. Значение по умолчанию -True
иDatabaseIntrospection.get_constraints()
метод должен включать'orders'
ключ в каждый из возвращаемых словарей со списком'ASC'
и / или'DESC'
значениями, соответствующими порядку каждого столбца в индексе. inspectdb
больше не называетDatabaseIntrospection.get_indexes()
устаревшим. Пользовательские механизмы баз данных должны гарантировать, что все типы индексов возвращаютсяDatabaseIntrospection.get_constraints()
.- Функция
ignores_quoted_identifier_case
была переименована в,ignores_table_name_case
чтобы более точно отражать ее использование. - Именованный параметр
name
был добавлен в метод, чтобы разрешить использование курсоров на стороне сервера для механизмов, которые их реализуют.DatabaseWrapper.create_cursor(self, name=None)
Прекращена поддержка PostgreSQL 9.2 и PostGIS 2.0 ¶
Поддержка PostgreSQL 9.2 в апстрим-проектах заканчивается в сентябре 2017 года. Поэтому Django 1.11 установил 9.3 как минимальную официально поддерживаемую версию PostgreSQL.
Поддержка PostGIS 2.0 также была прекращена, поскольку PostgreSQL 9.2 является последней версией, поддерживающей ее.
Кроме того, минимальная поддерживаемая версия psycopg2 была изменена с 2.4.5 на 2.5.4.
LiveServerTestCase
привязать к нулевому порту ¶
Вместо того, чтобы рассматривать диапазон портов и перебирать их, пока один из них не освободится, LiveServerTestCase
привяжите к нулевому порту и доверьте операционной системе выделение свободного порта. Переменная среды DJANGO_LIVE_TEST_SERVER_ADDRESS
больше не используется, поэтому параметр был удален.manage.py test --liveserver
Если вам нужно привязаться LiveServerTestCase
к определенному порту, используйте port
атрибут, добавленный в Django 1.11.2.
Защита от небезопасных редиректов в просмотрах django.contrib.auth
и i18n
¶
LoginView
, LogoutView
(и их устаревшие эквиваленты на основе функций) и set_language()
защищают пользователей от перенаправления на «следующие» URL-адреса, отличные от HTTPS, когда приложение работает под HTTPS.
QuerySet.get_or_create()
и update_or_create()
проверить их параметры ¶
Чтобы предотвратить автоматическое игнорирование опечаток get_or_create()
и update_or_create()
проверить, являются ли их параметры полями шаблона. Он должен быть обратно совместимым до тех пор, пока он не обнаруживает аномалию в вашем проекте.
pytz
является необходимой зависимостью и поддержки удаляются ¶settings.TIME_ZONE = None
Чтобы упростить управление часовыми поясами в Django, pytz
теперь это обязательная зависимость. Эта библиотека автоматически устанавливается при установке Django.
Поддержка удалена, так как поведение обычно не используется и сомнительно полезно. Если вы хотите автоматически определять часовой пояс на основе системного часового пояса, вы можете использовать tzlocal :settings.TIME_ZONE = None
from tzlocal import get_localzone
TIME_ZONE = get_localzone().zone
Работает как за исключением того, что еще и определяет . Сообщите нам, если вы считаете, что существует ситуация, когда невозможно адаптировать код для определения часового пояса .settings.TIME_ZONE = None
os.environ['TZ']
TIME_ZONE
Изменения HTML в шаблонах администрирования ¶
<p class="help">
заменяется тегом, <div>
позволяющим включать списки в текст справки.
Поля, доступные только для чтения, заключаются в оболочку вместо того, чтобы разрешить включение любого HTML-кода в содержимое поля.<div class="readonly">...</div>
<p>...</p>
Изменения в связи с введением рендеринга HTML-компонентов на основе шаблонов ¶
Некоторые классы, не задокументированные в django.forms.widgets
, удаляются:
SubWidget
RendererMixin
,ChoiceFieldRenderer
,RadioFieldRenderer
,CheckboxFieldRenderer
ChoiceInput
,RadioChoiceInput
,CheckboxChoiceInput
Недокументированный Select.render_option()
метод удален.
Метод Widget.format_output()
удален. Вместо этого используйте шаблон нестандартного компонента.
Некоторые значения компонентов, такие как параметры <select>
, теперь регионализируются, когда settings.USE_L10N=True
. Вы можете вернуться к старому поведению с помощью шаблонов пользовательских компонентов, которые используют тег шаблона localize
для отключения регионализации.
django.template.backends.django.Template.render()
запрещает контексты без словаря ¶
Для совместимости с конфигурациями с несколькими механизмами шаблонов django.template.backends.django.Template.render()
(возвращаемый высокоуровневыми API-интерфейсами загрузчика шаблонов, такими как by loader.get_template()
) должен получать словарь как контекст, а не классы Context
или RequestContext
. Если вы передали какой-либо из этих классов, передайте вместо него словарь, который все еще совместим со старыми версиями Django.
Изменения состояний модели в операциях миграции ¶
Чтобы повысить скорость применения миграций, рендеринг связанных моделей откладывается до операции, которая должна их использовать (например, RunPython
). Если у вас есть настраиваемая операция, которая работает с классами или экземплярами моделей из параметра from_state
в database_forwards()
или database_backwards()
, вы должны создать состояния модели, используя метод, clear_delayed_apps_cache()
как описано в разделе Написание собственных операций миграции .
Курсоры на стороне сервера в PostgreSQL ¶
Изменение, позволяющее QuerySet.iterator()
использовать серверные курсоры в PostgreSQL, предотвращает запуск Django с PgBouncer в режиме пула транзакций. Чтобы это предотвратить, используйте DISABLE_SERVER_SIDE_CURSORS
настройку (добавленную в Django 1.11.1) в
DATABASES
.
Дополнительные сведения см. В разделах «Массовые транзакции и курсоры на стороне сервера» .
Разное ¶
Если ни один элемент в потоке не имеет атрибута
pubdate
илиupdateddate
,SyndicationFeed.latest_post_date()
теперь возвращает текущую дату / время в формате UTC вместо наивной даты / времени без часового пояса.Ошибки CSRF регистрируются в регистраторе
django.security.csrf
вместоdjango.request
.Проверка
ALLOWED_HOSTS
больше не отключается при запуске тестов. Если ваше приложение включает тесты с настраиваемыми именами хостов, вы должны включить эти имена вALLOWED_HOSTS
. См. Тесты с несколькими именами хостов .Использование идентификатора внешнего ключа (например,
'field_id'
)ModelAdmin.list_display
отображает идентификатор связанного объекта. Удалите суффикс,_id
если вы хотите прежнее поведение текстового представления объекта.В шаблоне формы,
CharField
сnull=True
теперь сохраняет значенияNULL
на пустой записи вместо пустых строк.В Oracle
Model.validate_unique()
больше не проверяется уникальность пустых строк, поскольку база данных интерпретирует значение какNULL
.Если вы наследуете
AbstractUser
и перегружаетеclean()
, обязательно вызовитеsuper()
.BaseUserManager.normalize_email()
вызывается в новом методе,AbstractUser.clean()
поэтому нормализация применяется в таких ситуациях, как проверка шаблонов форм.EmailField
иURLField
больше не принимают указанный параметрstrip
. Он был удален, потому что он не действует в старых версиях Django, поскольку в этих полях всегда удаляются начальные и конечные пробелы.Атрибуты
checked
иselected
продукты, создаваемые компонентами формы, теперь используют логический синтаксис HTML 5 вместо XHTMLchecked="checked"
и синтаксисаselected='selected'
.RelatedManager.add()
,remove()
,clear()
И вset()
настоящее время стереть кэшprefetch_related()
.Чтобы избежать возможной потери сохраненных настроек,
setup_test_environment()
теперь выдает исключение при повторном вызове перед вызовомteardown_test_environment()
.Без документов псевдоним
DateTimeAwareJSONEncoder
изDjangoJSONEncoder
(переименовано в Django 1.0) был удален.Теперь включено , если не указан и является (последним вариантом по умолчанию значения ). Это может быть обратно несовместимым, если у вас есть теги шаблона, которые не являются потокобезопасными .
cached template loader
OPTIONS['loaders']
OPTIONS['debug']
False
DEBUG
Приглашение удалить устаревшие типы контента больше не появляется после того, как заказ был запущен
migrate
. Вместо этого используйте новую командуremove_stale_contenttypes
.Компонент формы администрирования для
IntegerField
использованияtype="number"
вместоtype="text"
.Условные заголовки HTTP теперь анализируются и сравниваются в соответствии со спецификацией условного запроса. RFC 7232, а не старыйRFC 2616 .
patch_response_headers()
больше не добавляет заголовокLast-Modified
. В соответствии сRFC 7234 # section-4.2.2 , этот заголовок не нужен, если присутствуют другие заголовки кеша, указывающие явную дату истечения срока действия, напримерExpires
илиCache-Control
.UpdateCacheMiddleware
иadd_never_cache_headers()
вызывают,patch_response_headers()
и поэтому на них также влияет это изменение.В административных шаблонах заменяется тегом, позволяющим включать списки в текст справки.
<p class="help">
<div>
ConditionalGetMiddleware
больше не устанавливает заголовок,Date
потому что его установили веб-серверы. ЗаголовокContent-Length
также больше не определяется этим промежуточным программным обеспечением, потому что эта задача переданаCommonMiddleware
.Если у вас есть промежуточное ПО, которое изменяет содержимое ответа и отображается перед
CommonMiddleware
в настройкахMIDDLEWARE
илиMIDDLEWARE_CLASSES
, вы должны переупорядочить свое промежуточное ПО, чтобы ответы не изменялись послеContent-Length
установки, или пусть ответ, изменяющий промежуточное ПО, сбрасываетContent-Length
заголовок.get_model()
иget_models()
выдают ошибку,AppRegistryNotReady
если они вызываются до загрузки шаблонов для всех приложений. Раньше они требовали загрузки только моделей из целевого приложения, которое могло возвращать модели с некоторыми неопределенными отношениями. Если вам абсолютно необходимо старое поведениеget_model()
, установите для параметраrequire_ready
значениеFalse
.Неиспользуемый атрибут
BaseCommand.can_import_settings
удален.Недокументированный декоратор
django.utils.functional.lazy_property
удален.Для согласованности с запросами без составных частей,
MultiPartParser.parse()
теперь определяетсяrequest.POST
как неизменяемый. Если вам нужно изменить эту структуруQueryDict
, вы должны сначала скопировать ее, например, с помощьюrequest.POST.copy()
.Поддержка
cx_Oracle
<5.2 прекращена.В команде прекращена поддержка IPython <1.0
shell
.Подпись частного API
Widget.build_attrs()
изменена с на .extra_attrs=None, **kwargs
base_attrs, extra_attrs=None
Файловые объекты (например,
StringIO
иBytesIO
), загруженныеImageField
в тестовый клиент, теперь требуютname
атрибута со значением, которое проходитvalidate_image_file_extension
валидатор. См. Примечание вClient.post()
.FileField
теперь перемещает, а не копирует полученный файл. С настройками загрузки файлов по умолчанию файлы большего размера, чемFILE_UPLOAD_MAX_MEMORY_SIZE
сейчас, имеют те же права, что и временные файлы (часто0o600
), а не стандартную маску системы (часто0o6644
). Установите,FILE_UPLOAD_PERMISSIONS
если вам нужно одинаковое разрешение независимо от размера файла.
Функции, устаревшие в Django 1.11 ¶
Декоратор models.permalink()
¶
django.urls.reverse()
Вместо этого используйте . Например :
from django.db import models
class MyModel(models.Model):
...
@models.permalink
def url(self):
return ('guitarist_detail', [self.slug])
СТАНОВИТСЯ:
from django.db import models
from django.urls import reverse
class MyModel(models.Model):
...
def url(self):
return reverse('guitarist_detail', args=[self.slug])
Разное ¶
- Функции мнение
login()
иlogout()
кcontrib.auth
уже устаревшим в пользу новых функций классовLoginView
иLogoutView
. - Неиспользованный параметр
extra_context
изcontrib.auth.views.logout_then_login()
является устаревшим. - Функции просмотров
password_change()
,password_change_done()
,password_reset()
,password_reset_done()
,password_reset_confirm()
и ,password_reset_complete()
чтобыcontrib.auth
быть устаревшими в пользу новых классов просмотровPasswordChangeView
,PasswordChangeDoneView
,PasswordResetView
,PasswordResetDoneView
,PasswordResetConfirmView
иPasswordResetCompleteView
. django.test.runner.setup_databases()
был перемещен вdjango.test.utils.setup_databases()
. Старая локация устарела.django.utils.translation.string_concat()
был заменен устаревшим наdjango.utils.text.format_lazy()
.string_concat(*strings)
можно заменить на .format_lazy('{}' * len(strings), *strings)
- Для механизма кэширования
PyLibMCCache
передача параметров поведенияpylibmc
в качестве атрибута верхнего уровня вOPTIONS
не рекомендуется. Вместо этого, определить эти параметры под ключbehaviors
вOPTIONS
. - Параметр
host
поdjango.utils.http.is_safe_url()
устаревшим в пользу нового параметраallowed_hosts
. - Скрытие исключений, возникающих при рендеринге тега шаблона, не рекомендуется, поскольку такое поведение иногда сбивало с толку. В Django 2.1 исключения будут распространяться.
{% include %}
DatabaseIntrospection.get_indexes()
был заменен устаревшим наDatabaseIntrospection.get_constraints()
.authenticate()
теперь передает параметрrequest
методуauthenticate()
механизмов аутентификации. Поддержка методов, которые не принимают позициюrequest
в качестве первого параметра, будет удалена в Django 2.1.- Этот параметр
USE_ETAGS
устарел, иConditionalGetMiddleware
теперь он добавляет заголовокETag
к ответам независимо от параметра.CommonMiddleware
иdjango.utils.cache.patch_response_headers()
больше не будет устанавливать заголовокETag
в конце периода устаревания. Model._meta.has_auto_field
был устаревшим в пользу контроля .Model._meta.auto_field is not None
- Использование групп регулярных выражений с
iLmsu#
inurl()
не рекомендуется. Единственная полезная группа -(?i)
для URL-адресов без учета регистра; однако использование этих URL-адресов не рекомендуется, так как они создают, например, несколько записей для поисковых систем. Альтернативным решением может быть создание функции, котораяhandler404
ищет символы верхнего регистра в URL-адресе и перенаправляет на эквивалент в нижнем регистре. - Параметр
renderer
добавлен в методWidget.render()
. Методы, которые не принимают этот параметр, все равно будут работать в период устаревания.