Приложение перенаправлений
Django поставляется с необязательным приложением перенаправлений. Оно позволяет хранить перенаправления в базе данных и обрабатывать их для вас. По умолчанию используется код состояния HTTP-ответа 301 Moved Permanently.
Установка
Чтобы установить приложение перенаправлений, выполните следующие действия:
- Убедитесь, что фреймворк
django.contrib.sitesустановлен. - Добавьте
'django.contrib.redirects'в ваше значение настройкиINSTALLED_APPS. - Добавьте
'django.contrib.redirects.middleware.RedirectFallbackMiddleware'в ваше значение настройкиMIDDLEWARE. - Выполните команду
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/