Функции-представления в качестве обязательного параметра получают объект 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), ]
Результат работы: