Приложение для перенаправления¶
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. Например:
>>> from django.conf import settings >>> from django.contrib.redirects.models import Redirect >>> # Add a new redirect. >>> redirect = Redirect.objects.create( ... site_id=1, ... old_path='/contact-us/', ... new_path='/contact/', ... ) >>> # Change a redirect. >>> redirect.new_path = '/contact-details/' >>> redirect.save() >>> redirect <Redirect: /contact-us/ ---> /contact-details/> >>> # Delete a redirect. >>> Redirect.objects.filter(site_id=1, old_path='/contact-us/').delete() (1, {'redirects.Redirect': 1})
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
.
-