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

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идентификатором сайта, который соответствует SITE_IDнастройке.

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

Промежуточное ПО активируется только для 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 ©2021 All rights reserved