Функции-представления в качестве обязательного параметра получают объект HttpRequest, который хранит информацию о запросе. HttpRequest определяет ряд атрибутов, которые хранят информацию о запросе. Выделим следующие из них:
scheme: схема запроса (http или https)
body: представляет тело запроса в виде строки байтов
path: представляет путь запроса
method: метод запроса (GET, POST, PUT и т.д.)
encoding: кодировка
content_type: тип содержимого запроса (значение заголовка CONTENT_TYPE)
GET: объект в виде словаря, который содержит параметры запроса GET
POST: объект в виде словаря, который содержит параметры запроса POST
COOKIES: отправленные клиентом куки
FILES: отправленные клиентом файлы
META: хранит все доступные заголовки http в виде словаря. Набор заголовков зависит от клиента и сервера, некоторые из них:
CONTENT_LENGTH: длина содержимого.CONTENT_TYPE: MIME-тип запроса.HTTP_ACCEPT: типы ответа, которые принимает клиент.HTTP_ACCEPT_ENCODING: кодировка, в которой клиент принимает ответ.HTTP_ACCEPT_LANGUAGE: язык ответа, который принимает клиент.HTTP_HOST: хост сервера.HTTP_REFERER: страница, с которой клиент отправил запрос (при ее наличии).HTTP_USER_AGENT: юзер-агент или информация о браузере клиента.QUERY_STRING: строка запроса.REMOTE_ADDR: IP-адрес клиента.REMOTE_HOST: имя хоста клиента.REMOTE_USER: аутентификационные данные клиента (при наличии)REQUEST_METHOD: тип запроса (GET, POST).SERVER_NAME: имя хоста сервера.SERVER_PORT: порт сервера.headers: заголовки запроса в виде словаря
Также HttpRequest определяет ряд методов. Отметим следующие из них:
get_full_path(): возвращает полный путь запроса, включая строку запроса
get_host(): возвращает хост клиента, для этого используется значения заголовков
HTTP_X_FORWARDED_HOST (если включена опция USE_X_FORWARDED_HOST) и HTTP_HOST
get_port(): возвращает номер порта
Например, получим некоторую информацию о запросе. Для этого в файле views.py:
from django.http import HttpResponse
def index(request):
host = request.META["HTTP_HOST"] # получаем адрес сервера
user_agent = request.META["HTTP_USER_AGENT"] # получаем данные бразера
path = request.path # получаем запрошенный путь
return HttpResponse(f"""
<p>Host: {host}</p>
<p>Path: {path}</p>
<p>User-agent: {user_agent}</p>
""")
В данном случае получаем два заголовка "HTTP_HOST" и "HTTP_USER_AGENT" и запрошенный путь.
В файле urls.py зарегистрируем данную функцию:
from django.urls import path
from hello import views
urlpatterns = [
path("index", views.index),
]
Результат работы: