Напишите view-класс APIPost()
, унаследовав его от APIView.Он будет работать с queryset, содержащим все объекты модели Post. При POST-запросе этот класс должен создавать новый объект модели Post и возвращать его, а по GET-запросу должен возвращаться сериализованный список всех объектов модели Post.
Подсказка:
Код аналогичен тому, что вы делали в прошлом уроке. Но написан он должен быть в объектно-ориентированном стиле.
В файл urls.py добавьте эндпоинт api/v1/posts/
, который вызывает view-класс APIPost()
. Не забудьте его импортировать.
Не стесняйтесь пользоваться кодом из Kittygram: там решалась очень похожая задача, и в листингах есть всё необходимое.
Код views.py:
from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from .models import Post from .serializers import PostSerializer class APIPost(APIView): def get(self, request): post = Post.objects.all() serializer = PostSerializer(post, many=True) return Response(serializer.data) def post(self, request): serializer = PostSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Архив с остальными файлами проекта: