Приложение перенаправлений
Django поставляется с необязательным приложением перенаправлений. Оно позволяет хранить простые перенаправления в базе данных и обрабатывает перенаправление за вас. По умолчанию оно использует код состояния ответа HTTP 301 Moved Permanently.
Установка
Чтобы установить приложение перенаправлений, выполните следующие действия:
- Убедитесь, что фреймворк
django.contrib.sitesустановлен. - Добавьте
'django.contrib.redirects'в свой параметрINSTALLED_APPS. - Добавьте
'django.contrib.redirects.middleware.RedirectFallbackMiddleware'в свой параметрMIDDLEWARE. - Запустите команду
manage.py migrate.
Как это работает
manage.py migrate создает таблицу django_redirect в вашей базе данных. Это простая справочная таблица с полями site_id, old_path и new_path.
Все работы выполняет RedirectFallbackMiddleware. Каждый раз, когда любое приложение Django вызывает ошибку 404, этот обработчик промежуточного ПО проверяет базу данных перенаправлений на запрашиваемый URL в качестве последней попытки. В частности, он ищет перенаправление с заданным old_path с идентификатором сайта, соответствующим параметру SITE_ID.
- Если он находит совпадение, и
new_pathне пусто, он перенаправляет наnew_pathс помощью перенаправления 301 (“Постоянно перемещено”). Вы можете создать подклассRedirectFallbackMiddlewareи установитьresponse_redirect_classнаdjango.http.HttpResponseRedirect, чтобы использовать перенаправление302 Moved Temporarilyвместо него. - Если он находит совпадение, и
new_pathпусто, он отправляет заголовок HTTP 410 (“Отсутствует”) и пустой (без содержимого) ответ. - Если совпадения нет, запрос обрабатывается как обычно.
Обработчик промежуточного ПО активируется только для ошибок 404 — не для ошибок 500 или ответов с любым другим кодом состояния.
Обратите внимание на порядок следования MIDDLEWARE. В общем случае вы можете поместить RedirectFallbackMiddleware в конец списка, так как он является последней мерой.
Дополнительную информацию об обработчиках промежуточного ПО можно найти в документации по обработчикам промежуточного ПО.
Как добавить, изменить и удалить перенаправления
Через интерфейс администрирования
Если вы активировали автоматический интерфейс администрирования Django, вы должны увидеть раздел «Перенаправления» на странице индекса администрирования. Редактируйте перенаправления так же, как вы редактируете любой другой объект в системе.
Через API Python
-
class models.Redirect -
Перенаправления представлены стандартной моделью Django, которая находится в django/contrib/redirects/models.py. Вы можете получить доступ к объектам перенаправления через API базы данных Django.
Обработчики промежуточного ПО
-
class middleware.RedirectFallbackMiddleware -
Вы можете изменить классы
HttpResponse, используемые обработчиком промежуточного ПО, создав подклассRedirectFallbackMiddlewareи переопределивresponse_gone_classи/илиresponse_redirect_class.-
response_gone_class -
Класс
HttpResponse, используемый, когдаRedirectне найден для запрошенного пути или имеет пустое значениеnew_path.По умолчанию
HttpResponseGone.
-
response_redirect_class -
Класс
HttpResponse, который обрабатывает перенаправление.По умолчанию
HttpResponsePermanentRedirect.
-
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.11/ref/contrib/redirects/