Класс HttpRequest
Класс HttpRequest создается автоматически Django для каждого
входящего запроса и передается в качестве первого аргумента
в каждую функцию представления. Объект запроса содержит
все данные о клиентском запросе: HTTP-метод, путь, заголовки,
параметры GET, данные POST, загруженные файлы и cookies.
Атрибуты и методы этого класса позволяют удобно получать
информацию о запросе и управлять сессиями пользователя.
Основные атрибуты
Объект HttpRequest предоставляет следующие ключевые атрибуты:
request.method # HTTP-метод: GET, POST, PUT, DELETE и др.
request.path # Путь запроса без домена и параметров
request.GET # QueryDict с GET-параметрами
request.POST # QueryDict с POST-данными
request.COOKIES # Словарь с cookies
request.FILES # Данные загруженных файлов
request.META # Словарь с заголовками и метаданными
request.session # Объект сессии
request.user # Текущий пользователь
request.headers # Объект заголовков запроса
request.body # Сырое тело запроса в байтах
Пример . Для GET-запроса
Рассмотрим пример обработки GET-запроса с параметрами:
from django.http import HttpResponse
def search_view(request):
# Получаем параметр search из строки запроса
query = request.GET.get('search', '')
# Получаем параметр page с значением по умолчанию
page = request.GET.get('page', 1)
# Проверяем метод запроса
if request.method == 'GET':
return HttpResponse(f"Search: {query}, Page: {page}")
Результат выполнения при запросе "/search/?search=django&page=2":
"Search: django, Page: 2"
Пример . Для POST-запроса
Обработка данных из формы, отправленной методом POST:
from django.http import HttpResponse
def login_view(request):
if request.method == 'POST':
# Получаем данные из POST-запроса
username = request.POST.get('username', '')
password = request.POST.get('password', '')
# Проверка данных пользователя
if username == 'admin' and password == 'secret':
return HttpResponse("Login successful")
return HttpResponse("Invalid credentials")
Работа с заголовками
Доступ к заголовкам запроса через атрибуты META и headers:
from django.http import HttpResponse
def headers_view(request):
# Получение заголовков через META (с префиксом HTTP_)
user_agent = request.META.get('HTTP_USER_AGENT', 'Unknown')
referer = request.META.get('HTTP_REFERER', '')
# Современный способ через headers
accept_language = request.headers.get('Accept-Language', 'en')
# IP-адрес клиента
remote_ip = request.META.get('REMOTE_ADDR', 'Unknown')
return HttpResponse(
f"User-Agent: {user_agent}\n"
f"Referer: {referer}\n"
f"Accept-Language: {accept_language}\n"
f"IP: {remote_ip}"
)
Проверка безопасности
Метод is_secure позволяет определить, используется ли
защищенное соединение HTTPS:
from django.http import HttpResponse
def secure_view(request):
if request.is_secure():
return HttpResponse("Secure HTTPS connection")
return HttpResponse("Insecure HTTP connection")
Построение полного URL
Метод build_absolute_uri создает абсолютный URL
относительно текущего запроса:
from django.http import HttpResponse
def url_view(request):
# Полный URL текущей страницы
full_url = request.build_absolute_uri()
# Полный URL с относительным путем
profile_url = request.build_absolute_uri('/profile/')
# Полный путь с параметрами
full_path = request.get_full_path()
return HttpResponse(
f"Full URL: {full_url}\n"
f"Profile URL: {profile_url}\n"
f"Full path: {full_path}"
)
Результат выполнения для запроса на "/articles/?page=1":
"Full URL: http://example.com/articles/?page=1"
"Profile URL: http://example.com/profile/"
"Full path: /articles/?page=1"
Работа с файлами
Обработка загруженных файлов через атрибут FILES:
from django.http import HttpResponse
def upload_view(request):
if request.method == 'POST' and request.FILES:
# Получаем загруженный файл
uploaded_file = request.FILES.get('file')
if uploaded_file:
# Читаем содержимое файла
content = uploaded_file.read()
file_name = uploaded_file.name
file_size = uploaded_file.size
# Проверяем тип файла
if uploaded_file.content_type == 'text/plain':
return HttpResponse(
f"File {file_name} uploaded successfully. "
f"Size: {file_size} bytes."
)
return HttpResponse("No file uploaded")
Получение полного пути
Метод get_full_path возвращает путь запроса вместе
со строкой параметров:
from django.http import HttpResponse
def path_view(request):
# Путь с параметрами
full_path = request.get_full_path()
# Путь без параметров
path_only = request.path
return HttpResponse(
f"Full path: {full_path}\n"
f"Path only: {path_only}"
)
Результат выполнения для запроса "/blog/?category=python&author=john":
"Full path: /blog/?category=python&author=john"
"Path only: /blog/"
Смотрите также
-
класс
HttpResponse,
который используется для формирования ответа -
класс
QueryDict,
который используется для хранения параметров запроса -
атрибут
GET,
который содержит GET-параметры запроса -
атрибут
POST,
который содержит POST-параметры запроса