Метод post
Метод post применяется в классах-представлениях Django для обработки POST-запросов. Он вызывается автоматически, когда запрос к представлению приходит с методом POST. В качестве аргументов метод принимает объект HttpRequest и дополнительные параметры, переданные через URL. Метод должен возвращать объект HttpResponse или его подкласс, который будет отправлен клиенту в качестве ответа.
Синтаксис
from django.http import HttpResponse
from django.views import View
class MyView(View):
def post(self, request, *args, **kwargs):
# обработка POST-запроса
return HttpResponse("Ответ")
Пример
Рассмотрим пример класса-представления, которое обрабатывает отправку формы через POST-запрос:
from 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)
Результат выполнения при успешном создании:
"Article 'My New Article' created"
Пример
Рассмотрим пример обработки POST-запроса с обновлением существующей записи:
from 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")
Результат выполнения при успешном обновлении:
"Article 'Updated Title' updated"
Пример
Рассмотрим пример обработки POST-запроса с использованием форм Django:
from 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})
Результат выполнения при успешной валидации:
"Redirect to /articles/5/"