Опишите view-функцию API api_posts()
, которая будет работать с объектами модели Post и обрабатывать только GET- и POST-запросы:
- в ответ на GET-запрос функция должна возвращать queryset со всеми объектами модели Post;
- при POST-запросе функция должна создавать новый объект и возвращать его.
В файл urls.py добавьте эндпоинт api/v1/posts/
, который вызывает view-функцию API api_posts
.
Заранее предусмотрим в проекте возможность дальнейшего развития: будем версионировать API. Начнём с первой версии: эндпоинты API будут выглядеть так: api/v1/...
.
В файле serializers.py подготовлен сериализатор PostSerializer
.
Подсказка:
В urls.py импортируйте view-функцию api_posts()
.
Чтобы PostSerializer
мог обрабатывать коллекцию объектов, в конструкторе сериализатора укажите именованный аргумент many=True
.
Примените методы сериализатора is_valid()
, save()
— и у вас всё получится!
Код views.py:
from rest_framework.decorators import api_view # Импортировали декоратор from rest_framework.response import Response from .models import Post from rest_framework import status from .serializers import PostSerializer @api_view(['GET', 'POST']) def api_posts(request): if request.method == 'POST': 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) posts = Post.objects.all() serializer = PostSerializer(posts, many=True) return Response(serializer.data)
Архив готового проекта: