Приложение перенаправления ¶
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 («Gone») и пустой (без содержимого) ответ. - Если совпадение не найдено, запрос продолжает обрабатываться в обычном режиме.
Промежуточное ПО активируется только для 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
.
-