Атрибут method
Атрибут method объекта HttpRequest возвращает строку, представляющую HTTP-метод, с которым был сделан запрос. Доступные значения: 'GET', 'POST', 'PUT', 'DELETE', 'HEAD', 'OPTIONS', 'PATCH' и другие. Этот атрибут всегда возвращает строку в верхнем регистре, что удобно для проверки типа запроса в представлениях.
Атрибут не принимает никаких параметров и доступен только для чтения. Его основное назначение - определение типа запроса для выбора соответствующей логики обработки в представлениях. Это критически важно для REST API, обработки форм и реализации CRUD-операций.
Синтаксис
request.method
Пример
Проверим, является ли запрос GET-запросом, и обработаем его соответствующим образом:
from django.http import HttpResponse
from django.shortcuts import render
def my_view(request):
if request.method == 'GET':
return HttpResponse("Это GET-запрос")
return HttpResponse("Другой тип запроса")
Пример
Обработаем POST-запрос с данными формы:
from 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-методов в одном представлении:
from 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)
Пример
Проверим метод запроса в классе-представлении:
from 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-запросов