Метод build_absolute_uri
Метод build_absolute_uri применяется к объекту запроса HttpRequest и возвращает абсолютный URL в виде строки. Он принимает один необязательный параметр - относительный путь или полный URL, и на основе текущего запроса строит абсолютный URL с протоколом, доменом и портом. Метод полезен для генерации ссылок, которые будут отправлены в письмах, API-ответах или использованы в шаблонах, когда требуется полный URL, а не относительный путь.
Параметр метода может быть строкой, содержащей относительный путь (например, '/articles/') или полный URL (например, 'https://example.com/page/'). Если параметр не указан, метод возвращает абсолютный URL текущего запроса. Метод автоматически учитывает настройки SECURE_PROXY_SSL_HEADER и USE_X_FORWARDED_HOST для корректного определения протокола и хоста за прокси-серверами.
Синтаксис
request.build_absolute_uri(location=None)
Пример
Давайте получим абсолютный URL текущей страницы, на которую был отправлен запрос:
from django.http import HttpRequest
request = HttpRequest()
request.path = '/articles/2025/'
request.META['HTTP_HOST'] = 'example.com'
request.META['SERVER_PORT'] = '80'
absolute_url = request.build_absolute_uri()
print(absolute_url)
Результат выполнения кода:
"http://example.com/articles/2025/"
Пример
Давайте создадим абсолютный URL для указанного относительного пути:
from django.http import HttpRequest
request = HttpRequest()
request.path = '/profile/'
request.META['HTTP_HOST'] = 'example.com'
request.META['SERVER_PORT'] = '443'
absolute_url = request.build_absolute_uri('/articles/?page=2')
print(absolute_url)
Результат выполнения кода:
"https://example.com/articles/?page=2"
Пример
Рассмотрим использование метода во view-функции для создания ссылки на страницу подтверждения регистрации:
from django.shortcuts import render
from django.http import HttpRequest
def confirm_email(request, token):
confirmation_link = request.build_absolute_uri(f'/confirm/{token}/')
print(confirmation_link)
return render(request, 'confirm.html', {'link': confirmation_link})
Результат выполнения кода при запросе на 'https://mysite.com/signup/':
"https://mysite.com/confirm/abc123def/"
Пример
Метод также позволяет преобразовывать переданный полный URL, добавляя или заменяя параметры:
from django.http import HttpRequest
request = HttpRequest()
request.META['HTTP_HOST'] = 'example.com'
request.META['SERVER_PORT'] = '8080'
full_url = request.build_absolute_uri('https://another-site.com/page/?id=5')
print(full_url)
Результат выполнения кода:
"https://another-site.com/page/?id=5"
Смотрите также
-
метод
get_full_path,
который возвращает путь и строку запроса текущего запроса -
атрибут
path,
который содержит путь запроса без параметров -
атрибут
headers,
который содержит заголовки HTTP-запроса -
метод
is_secure,
который определяет, был ли запрос отправлен по HTTPS