РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
339 of 818 menu

Класс 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-параметры запроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить