Атрибут method

Атрибут method объекта HttpRequest возвращает строку, представляющую HTTP-метод, с которым был сделан запрос. Доступные значения: 'GET', 'POST', 'PUT', 'DELETE', 'HEAD', 'OPTIONS', 'PATCH' и другие. Этот атрибут всегда возвращает строку в верхнем регистре, что удобно для проверки типа запроса в представлениях.

Атрибут не принимает никаких параметров и доступен только для чтения. Его основное назначение - определение типа запроса для выбора соответствующей логики обработки в представлениях. Это критически важно для REST API, обработки форм и реализации CRUD-операций.

Синтаксис

pythonrequest.method

Пример

Проверим, является ли запрос GET-запросом, и обработаем его соответствующим образом:

pythonfrom django.http import HttpResponse
from django.shortcuts import render

def my_view(request):
  if request.method == 'GET':
    return HttpResponse("Это GET-запрос")
  return HttpResponse("Другой тип запроса")

Пример

Обработаем POST-запрос с данными формы:

pythonfrom django.http import HttpResponse
from django.shortcuts import render

def form_handler(request):
  if request.method == 'POST':
    name = request.POST.get('name', '')
    return HttpResponse(f"Привет, {name}!")
  return render(request, 'form.html')

Пример

Реализуем обработку разных HTTP-методов в одном представлении:

pythonfrom django.http import JsonResponse
from django.shortcuts import get_object_or_404
from myapp.models import Article

def article_api(request, pk):
  article = get_object_or_404(Article, pk=pk)
  
  if request.method == 'GET':
    data = {'title': article.title, 'status': article.status}
    return JsonResponse(data)
  
  elif request.method == 'PUT':
    # обработка PUT-запроса
    return JsonResponse({'message': 'Обновлено'})
  
  elif request.method == 'DELETE':
    article.delete()
    return JsonResponse({'message': 'Удалено'})
  
  return JsonResponse({'error': 'Метод не разрешен'}, status=405)

Пример

Проверим метод запроса в классе-представлении:

pythonfrom django.views import View
from django.http import HttpResponse

class MyView(View):
  def dispatch(self, request, *args, **kwargs):
    if request.method in ['PUT', 'PATCH']:
      return HttpResponse("Метод PUT или PATCH")
    return super().dispatch(request, *args, **kwargs)
  
  def get(self, request):
    return HttpResponse("GET-запрос")
  
  def post(self, request):
    return HttpResponse("POST-запрос")

Смотрите также

  • атрибут GET,
    который содержит GET-параметры запроса
  • атрибут POST,
    который содержит POST-данные запроса
  • атрибут META,
    который содержит метаданные запроса
  • декоратор require_GET,
    который ограничивает доступ только для GET-запросов