View-функции API. Задание 1

Опишите 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)

Архив готового проекта:





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: