Приложение перенаправления¶
Django поставляется с дополнительным приложением для перенаправления. Он позволяет вам хранить перенаправления в базе данных и выполнять их за вас. По умолчанию он использует код состояния ответа HTTP «301 Moved Permanently».
Установка¶
Чтобы установить приложение перенаправления, выполните следующие действия:
Убедитесь, что фреймворк django.contrib.sites установлен <enable-the-sites-framework>.
Добавьте
'django.contrib.redirects'в настройкуINSTALLED_APPS.Добавьте ``“django.contrib.redirects.middleware.RedirectFallbackMiddleware“` в настройки
MIDDLEWARE.Запустите команду
manage.py migrate.
Как это работает¶
manage.pymigrate создает таблицу 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 Temporariesвместо этого.Если он находит совпадение, а
new_pathпуст, он отправляет HTTP-заголовок 410 («Gone») и пустой (без содержимого) ответ.Если страница не найдена, запрос обрабатывается как обычно.
Промежуточный слой активируется только при 404 ответе, 500 и прочие игнорируются.
Обратите внимание, что порядок MIDDLEWARE имеет значение. Как правило, вы можете поместить RedirectFallbackMiddleware в конец списка, потому что это крайний вариант.
Подробнее смотрите в разделе о промежуточных слоях.
Как добавлять, изменять и удалять редиректы¶
Через интерфейс администратора¶
Если вы активировали автоматический интерфейс администратора Django, вы должны увидеть раздел «Перенаправления» на главной странице администратора. Редактируйте перенаправления так же, как вы редактируете любой другой объект в системе.
Через Python API¶
- 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})
Промежуточный слой (Middleware)¶
- class middleware.RedirectFallbackMiddleware¶
Вы можете изменить классы
HttpResponse, используемые промежуточным программным обеспечением, создав подклассRedirectFallbackMiddlewareи переопределивresponse_gone_classи/илиresponse_redirect_class.- response_gone_class¶
Класс
HttpResponseиспользуется, когдаRedirectне найден для запрошенного пути или имеет пустое значениеnew_path.По умолчанию:
HttpResponseGone.
- response_redirect_class¶
Класс
HttpResponse, который обрабатывает перенаправление.По умолчанию:
HttpResponsePermanentRedirect.