Метод post

Метод post применяется в классах-представлениях Django для обработки POST-запросов. Он вызывается автоматически, когда запрос к представлению приходит с методом POST. В качестве аргументов метод принимает объект HttpRequest и дополнительные параметры, переданные через URL. Метод должен возвращать объект HttpResponse или его подкласс, который будет отправлен клиенту в качестве ответа.

Синтаксис

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

class MyView(View):
  def post(self, request, *args, **kwargs):
    # обработка POST-запроса
    return HttpResponse("Ответ")

Пример

Рассмотрим пример класса-представления, которое обрабатывает отправку формы через POST-запрос:

pythonfrom django.http import HttpResponse
from django.views import View
from myapp.models import Article

class ArticleCreateView(View):
  def post(self, request, *args, **kwargs):
    title = request.POST.get('title')
    content = request.POST.get('content')

    if title and content:
      article = Article.objects.create(
        title=title,
        content=content
      )
      return HttpResponse(f"Article '{article.title}' created")
    else:
      return HttpResponse("Missing required fields", status=400)

Результат выполнения при успешном создании:

python"Article 'My New Article' created"

Пример

Рассмотрим пример обработки POST-запроса с обновлением существующей записи:

pythonfrom django.http import HttpResponse
from django.shortcuts import get_object_or_404
from django.views import View
from myapp.models import Article

class ArticleUpdateView(View):
  def post(self, request, article_id, *args, **kwargs):
    article = get_object_or_404(Article, id=article_id)

    new_title = request.POST.get('title')
    new_content = request.POST.get('content')

    if new_title:
      article.title = new_title
    if new_content:
      article.content = new_content

    article.save()
    return HttpResponse(f"Article '{article.title}' updated")

Результат выполнения при успешном обновлении:

python"Article 'Updated Title' updated"

Пример

Рассмотрим пример обработки POST-запроса с использованием форм Django:

pythonfrom django.http import HttpResponseRedirect
from django.shortcuts import render
from django.views import View
from myapp.forms import ArticleForm

class ArticleFormView(View):
  def post(self, request, *args, **kwargs):
    form = ArticleForm(request.POST)

    if form.is_valid():
      article = form.save()
      return HttpResponseRedirect(f'/articles/{article.id}/')
    else:
      return render(request, 'article_form.html', {'form': form})

Результат выполнения при успешной валидации:

python"Redirect to /articles/5/"

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

  • метод get,
    который обрабатывает GET-запросы в классах-представлениях
  • метод dispatch,
    который определяет метод обработки запроса на основе HTTP-метода
  • метод as_view,
    который преобразует класс-представление в функцию
  • класс View,
    базовый класс для всех представлений в Django