Spec-Zone.ru › Django 6.0

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

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/6.0/ref/contrib/redirects/

Spec-Zone.ru

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