Приложение перенаправлений
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/6.0/ref/contrib/redirects/