Приложение для перенаправления¶
Django поставляется с дополнительным приложением для перенаправления. Оно позволяет хранить простые перенаправления в базе данных и выполняет перенаправление за вас. По умолчанию оно использует код статуса ответа HTTP 301 Moved Permanently
.
Установка¶
Чтобы установить приложение «Перенаправления», выполните следующие действия:
- Убедитесь, что рамки
django.contrib.sites
is installed. - Добавьте
'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 («Moved Permanently») перенаправление. Вы можете подклассифицироватьRedirectFallbackMiddleware
и установитьresponse_redirect_class
вdjango.http.HttpResponseRedirect
, чтобы вместо этого использовать перенаправление302 Moved Temporarily
. - Если он находит совпадение, а
new_path
пуст, он отправляет HTTP-заголовок 410 («Исчез») и пустой (content-less) ответ. - Если он не находит совпадения, запрос продолжает обрабатываться как обычно.
Промежуточное ПО активируется только для 404 - не для 500 или ответов с любым другим кодом состояния.
Обратите внимание, что порядок MIDDLEWARE
имеет значение. Вообще, RedirectFallbackMiddleware
можно поставить в конец списка, потому что это крайняя мера.
Подробнее о промежуточном программном обеспечении читайте в middleware docs.
Как добавлять, изменять и удалять перенаправления¶
Через интерфейс администратора¶
Если вы активировали автоматический интерфейс администратора Django, вы должны увидеть раздел «Перенаправления» на индексной странице администратора. Редактируйте перенаправления, как вы редактируете любой другой объект в системе.
Через API Python¶
-
class
models.
Redirect
¶ Перенаправления представлены стандартным Django model, который живет в django/contrib/redirects/models.py. Вы можете получить доступ к объектам перенаправления через Django database API.
Middleware¶
-
class
middleware.
RedirectFallbackMiddleware
¶ Вы можете изменить классы
HttpResponse
, используемые промежуточным ПО, создав подклассRedirectFallbackMiddleware
и переопределивresponse_gone_class
и/илиresponse_redirect_class
.-
response_gone_class
¶ Класс
HttpResponse
используется, когдаRedirect
не найден для запрашиваемого пути или имеет пустое значениеnew_path
.По умолчанию имеет значение
HttpResponseGone
.
-
response_redirect_class
¶ Класс
HttpResponse
, который обрабатывает перенаправление.По умолчанию имеет значение
HttpResponsePermanentRedirect
.
-