Класс HttpResponsePermanentRedirect
Класс HttpResponsePermanentRedirect является подклассом HttpResponseRedirect
и предназначен для создания постоянного перенаправления с
кодом состояния HTTP 301 Moved Permanently. Он применяется в
представлениях, когда требуется перенаправить пользователя
на другой URL-адрес на постоянной основе. В отличие от
HttpResponseRedirect (код 302), постоянный редирект
информирует поисковые системы о том, что страница перемещена
навсегда, и вес ссылок передается новому адресу.
Конструктор класса принимает обязательный аргумент -
целевой URL, на который будет выполняться перенаправление.
URL может быть передан как строка с абсолютным или
относительным путем. Также можно использовать именованные
URL-пути совместно с функцией reverse или
reverse_lazy для динамической генерации адреса.
Синтаксис
from django.http import HttpResponsePermanentRedirect
HttpResponsePermanentRedirect(redirect_to, *args, **kwargs)
Параметры конструктора:
-
redirect_to- обязательный строковый параметр, задающий целевой URL для перенаправления; -
*argsи**kwargs- дополнительные аргументы, которые передаются родительскому классуHttpResponse.
Пример . С прямым указанием URL
Давайте создадим представление, которое перенаправляет пользователя на главную страницу при обращении к старому адресу:
from django.http import HttpResponsePermanentRedirect
from django.views import View
class OldPageRedirectView(View):
def get(self, request):
return HttpResponsePermanentRedirect('/')
Результат выполнения кода при переходе на старую страницу:
"HTTP 301 Moved Permanently"
"Redirecting to /"
Пример . С использованием reverse
Теперь рассмотрим пример перенаправления на именованный
URL-путь с использованием функции reverse:
from django.http import HttpResponsePermanentRedirect
from django.urls import reverse
from django.views import View
class ArticleRedirectView(View):
def get(self, request, article_id):
return HttpResponsePermanentRedirect(
reverse('article_detail', args=[article_id])
)
Результат выполнения кода при обращении к представлению
с аргументом 42:
"HTTP 301 Moved Permanently"
"Redirecting to /articles/42/"
Пример . С reverse_lazy для классов
При использовании классовых представлений часто применяют
reverse_lazy для отложенного разрешения URL:
from django.http import HttpResponsePermanentRedirect
from django.urls import reverse_lazy
from django.views import View
class CategoryRedirectView(View):
redirect_url = reverse_lazy('category_list')
def get(self, request, category_slug):
return HttpResponsePermanentRedirect(
self.redirect_url
)
Результат выполнения кода при перенаправлении на список категорий:
"HTTP 301 Moved Permanently"
"Redirecting to /categories/"
Пример . С динамическими параметрами
Построим перенаправление с динамическими параметрами из запроса:
from django.http import HttpResponsePermanentRedirect
from django.urls import reverse
from django.views import View
class UserProfileRedirectView(View):
def get(self, request, old_username):
new_username = old_username.lower()
return HttpResponsePermanentRedirect(
reverse('user_profile', args=[new_username])
)
Результат выполнения кода при старом имени пользователя
'JohnDoe':
"HTTP 301 Moved Permanently"
"Redirecting to /users/johndoe/"
Смотрите также
-
класс
HttpResponseRedirect,
который выполняет временное перенаправление (302) -
функция
redirect,
которая является сокращенным способом создания редиректов -
класс
RedirectView,
который предоставляет готовое классовое представление для редиректа -
класс
permanent,
атрибут для настройки постоянности перенаправления вRedirectView