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

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

Установка

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

  1. Убедитесь, что приложение django.contrib.sites установлено .
  2. Добавьте 'django.contrib.redirects' к своей настройке INSTALLED_APPS .
  3. Добавьте 'django.contrib.redirects.middleware.RedirectFallbackMiddleware' к своей настройке MIDDLEWARE .
  4. Запустите команду .manage.py migrate

Операция

manage.py migrate создает таблицу django_redirect в вашей базе данных. Это таблица поиска с полями site_id , old_path и new_path .

Промежуточное ПО RedirectFallbackMiddleware выполняет всю работу. Каждый раз, когда приложение Django генерирует ошибку 404, это промежуточное ПО проверяет, в крайнем случае, находится ли запрошенный URL-адрес в базе данных перенаправления. Точнее, он ищет перенаправление, поле которого old_path соответствует URL-адресу, а идентификатор сайта соответствует настройке SITE_ID .

  • Если совпадение найдено, но new_path оно не пусто, оно перенаправляется на new_path использование 301 редиректа («Перемещено навсегда»). Можно создать подкласс RedirectFallbackMiddleware и набор response_redirect_class для django.http.HttpResponseRedirect использования редиректа вместо .302 Moved Temporarily
  • Если совпадение найдено и new_path оно пусто, оно отправляет ошибку 410 («Gone») в заголовке HTTP и пустой ответ (без содержимого).
  • Если совпадений не найдено, обработка запроса продолжается в обычном режиме.

Промежуточное ПО активируется только для 404 ошибок - не для 500 ошибок или ответов с любым другим кодом состояния.

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

Дополнительные сведения об этом промежуточном программном обеспечении см. В документации промежуточного программного обеспечения .

Добавление, изменение и удаление редиректов

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

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

Через API Python

класс 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.RedirectFallbackMiddleware

Вы можете изменить классы, HttpResponse используемые промежуточным программным обеспечением, создав подкласс RedirectFallbackMiddleware и переопределив атрибуты response_gone_class или response_redirect_class .

response_gone_class

Класс, HttpResponse используемый, когда Redirect для запрошенного пути ничего не найдено или для него указано пустое значение new_path .

По умолчанию это HttpResponseGone .

response_redirect_class

Класс HttpResponse , выполняющий перенаправление.

По умолчанию это HttpResponsePermanentRedirect .

Copyright ©2020 All rights reserved