Spec-Zone.ru › Django 3.2

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

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 («Ушло») и пустой (без содержимого) ответ.
  • Если совпадения не найдено, запрос продолжает обрабатываться как обычно.

Миддлвей активируется только для ошибок 404 — не для 500 и ответов с другими кодами состояния.

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

Дополнительные сведения о миддлвее см. в документации по миддлвею.

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

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

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

Через API Python

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})

Миддлвей

class middleware.RedirectFallbackMiddleware

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

response_gone_class

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

По умолчанию используется HttpResponseGone.

response_redirect_class

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

По умолчанию используется HttpResponsePermanentRedirect.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/3.2/ref/contrib/redirects/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API