Приложение перенаправления ¶
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
соответствует URL-адресу, а идентификатор сайта соответствует настройке SITE_ID
.
- Если совпадение найдено, но
new_path
оно не пусто, оно перенаправляется наnew_path
использование 301 редиректа («Перемещено навсегда»). Можно создать подклассRedirectFallbackMiddleware
и наборresponse_redirect_class
дляdjango.http.HttpResponseRedirect
использования редиректа вместо .302 Moved Temporarily
- Если совпадение найдено и
new_path
оно пусто, оно отправляет ошибку 410 («Gone») в заголовке HTTP и пустой ответ (без содержимого). - Если совпадений не найдено, обработка запроса продолжается в обычном режиме.
Промежуточное ПО активируется только для 404 ошибок - не для 500 ошибок или ответов с любым другим кодом состояния.
Обратите внимание, что порядок настройки MIDDLEWARE
важен. Обычно вы можете поместить его RedirectFallbackMiddleware
в конец списка, потому что его следует вызывать в крайнем случае.
Дополнительные сведения об этом промежуточном программном обеспечении см. В документации промежуточного программного обеспечения .
Добавление, изменение и удаление редиректов ¶
Через интерфейс администрирования ¶
Если вы включили автоматический интерфейс администратора Django, вы должны увидеть раздел «Перенаправления» на домашней странице сайта администратора. Редактируйте перенаправления так же, как вы редактируете любой другой объект в системе.
Через API Python ¶
-
класс
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.
RedirectFallbackMiddleware
¶ Вы можете изменить классы,
HttpResponse
используемые промежуточным программным обеспечением, создав подклассRedirectFallbackMiddleware
и переопределив атрибутыresponse_gone_class
илиresponse_redirect_class
.-
response_gone_class
¶ Класс,
HttpResponse
используемый, когдаRedirect
для запрошенного пути ничего не найдено или для него указано пустое значениеnew_path
.По умолчанию это
HttpResponseGone
.
-
response_redirect_class
¶ Класс
HttpResponse
, выполняющий перенаправление.По умолчанию это
HttpResponsePermanentRedirect
.
-