Writing Post Viewsets
Learn to create viewset for the Post model, and create a sample post to test the endpoint.
We'll cover the following...
For the following endpoint, we’ll only be allowing the POST and GET methods. This will help us have the basic features working first.
Requirements
The code should follow these rules:
Only authenticated users can create posts.
Only authenticated users can read posts.
Only
GETandPOSTmethods are allowed.
Inside the post directory, create a file called viewsets.py. Into the file, add the following content:
from rest_framework.permissions import IsAuthenticatedfrom core.abstract.viewsets import AbstractViewSetfrom core.post.models import Postfrom core.post.serializers import PostSerializerclass PostViewSet(AbstractViewSet):http_method_names = ('post', 'get')permission_classes = (IsAuthenticated,)serializer_class = PostSerializerdef get_queryset(self):return Post.objects.all()def get_object(self):obj = Post.objects.get_object_by_public_id(self.kwargs['pk'])self.check_object_permissions(self.request, obj)return objdef create(self, request, *args, **kwargs):serializer = self.get_serializer(data=request.data)serializer.is_valid(raise_exception=True)self.perform_create(serializer)return Response(serializer.data, status=status.HTTP_201_CREATED)
In the preceding code, we defined three interesting methods:
The
get_querysetmethod returns all the posts. We don’t actually have particular requirements for fetching posts, so we can return all posts in the database.The
get_objectmethod returns a post object usingpublic_idthat will be present in the URL. We retrieve this parameter ...