• 3.1
  • 3.2
  • 6.1
  • Версия документации: 5.0

Приложение перенаправления

Django поставляется с дополнительным приложением для перенаправления. Он позволяет вам хранить перенаправления в базе данных и выполнять их за вас. По умолчанию он использует код состояния ответа HTTP «301 Moved Permanently».

Установка

Чтобы установить приложение перенаправления, выполните следующие действия:

  1. Убедитесь, что фреймворк django.contrib.sites установлен <enable-the-sites-framework>.

  2. Добавьте 'django.contrib.redirects' в настройку INSTALLED_APPS.

  3. Добавьте ``“django.contrib.redirects.middleware.RedirectFallbackMiddleware“` в настройки MIDDLEWARE.

  4. Запустите команду manage.py migrate.

Как это работает

manage.pymigrate создает таблицу 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 Temporaries вместо этого.

  • Если он находит совпадение, а new_path пуст, он отправляет HTTP-заголовок 410 («Gone») и пустой (без содержимого) ответ.

  • Если страница не найдена, запрос обрабатывается как обычно.

Промежуточный слой активируется только при 404 ответе, 500 и прочие игнорируются.

Обратите внимание, что порядок MIDDLEWARE имеет значение. Как правило, вы можете поместить RedirectFallbackMiddleware в конец списка, потому что это крайний вариант.

Подробнее смотрите в разделе о промежуточных слоях.

Как добавлять, изменять и удалять редиректы

Через интерфейс администратора

Если вы активировали автоматический интерфейс администратора Django, вы должны увидеть раздел «Перенаправления» на главной странице администратора. Редактируйте перенаправления так же, как вы редактируете любой другой объект в системе.

Через Python API

class models.Redirect

Перенаправления представлены стандартной моделью Django, которая находится в django/contrib/redirects/models.py. Доступ к объектам перенаправления можно получить через API базы данных Django. Например:

>>> 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.

Back to Top