Приложение перенаправлений
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 со значением ID сайта, соответствующим настройке 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/2.1/ref/contrib/redirects/