Приложение перенаправлений
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, этот middleware проверяет базу данных перенаправлений в качестве последнего средства. В частности, он ищет перенаправление с заданным old_path и идентификатором сайта, соответствующим значению настройки SITE_ID.
- Если найдено совпадение, и
new_pathне пусто, то происходит перенаправление наnew_pathс использованием перенаправления 301 (“Перемещено Постоянно”). Вы можете наследовать отRedirectFallbackMiddlewareи установитьresponse_redirect_classнаdjango.http.HttpResponseRedirect, чтобы использовать перенаправление302 Moved Temporarily. - Если найдено совпадение, и
new_pathпусто, то отправляется HTTP-заголовок 410 (“Удалён”) и пустой (без содержимого) ответ. - Если совпадение не найдено, запрос обрабатывается как обычно.
Middleware активируется только для ошибок 404 — не для 500 и ответов с любым другим кодом статуса.
Обратите внимание на порядок следования MIDDLEWARE. Обычно, вы можете поместить RedirectFallbackMiddleware в конец списка, поскольку он является крайним средством.
Дополнительную информацию о middleware можно найти в документации по middleware.
Как добавлять, изменять и удалять перенаправления
Через интерфейс администратора
Если вы активировали автоматический интерфейс администратора Django, вы должны увидеть раздел “Перенаправления” на странице индекса администратора. Редактируйте перенаправления, как и любой другой объект в системе.
Через API Python
-
class models.Redirect -
Перенаправления представлены стандартной моделью Django, которая находится в django/contrib/redirects/models.py. Вы можете получить доступ к объектам перенаправления через API базы данных Django.
Middleware
-
class middleware.RedirectFallbackMiddleware -
Вы можете изменить используемые middleware классы
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/3.0/ref/contrib/redirects/