Приложение перенаправлений
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, вы увидите раздел «Перенаправления» на главной странице администратора. Редактируйте перенаправления так же, как и любой другой объект в системе.
Через Python API
-
class models.Redirect -
Перенаправления представлены стандартной моделью Django, которая находится в django/contrib/redirects/models.py. Вы можете получить доступ к объектам перенаправления через API базы данных Django.
Промежуточные программные модули
-
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/2.2/ref/contrib/redirects/