Приложение для перенаправления¶
Django поставляется с дополнительным приложением для перенаправления. Оно позволяет хранить перенаправления в базе данных и обрабатывает перенаправления за вас. По умолчанию оно использует код статуса ответа HTTP 301 Moved Permanently.
Установка¶
Чтобы установить приложение «Перенаправления», выполните следующие действия:
- Убедитесь, что рамки django.contrib.sitesis installed.
- Добавьте '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 («Moved Permanently») перенаправление. Вы можете подклассифицироватьRedirectFallbackMiddlewareи установитьresponse_redirect_classвdjango.http.HttpResponseRedirect, чтобы вместо этого использовать перенаправление302 Moved Temporarily.
- Если он находит совпадение, а new_pathпуст, он отправляет HTTP-заголовок 410 («Исчез») и пустой (content-less) ответ.
- Если он не находит совпадения, запрос продолжает обрабатываться как обычно.
Промежуточное ПО активируется только для 404 - не для 500 или ответов с любым другим кодом состояния.
Обратите внимание, что порядок MIDDLEWARE имеет значение. Вообще, RedirectFallbackMiddleware можно поставить в конец списка, потому что это крайняя мера.
Подробнее о промежуточном программном обеспечении читайте в middleware docs.
Как добавлять, изменять и удалять перенаправления¶
Через интерфейс администратора¶
Если вы активировали автоматический интерфейс администратора Django, вы должны увидеть раздел «Перенаправления» на индексной странице администратора. Редактируйте перенаправления, как вы редактируете любой другой объект в системе.
Через API Python¶
- 
class models.Redirect¶
- Перенаправления представлены стандартным Django model, который живет в django/contrib/redirects/models.py. Вы можете получить доступ к объектам перенаправления через Django database API. Например: - >>> 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.
 
-