Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
# blog/api/views.py — APIView and generic views from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status, generics, permissions from ..models import Post from ..serializers import PostSerializer # --- Low-level APIView --- class PostListAPIView(APIView): permission_classes = [permissions.IsAuthenticatedOrReadOnly] def get(self, request): posts = Post.published.select_related('author').order_by('-published_at') serializer = PostSerializer(posts, many=True, context={'request': request}) return Response(serializer.data) def post(self, request): serializer = PostSerializer(data=request.data, context={'request': request}) if serializer.is_valid(): serializer.save(author=request.user) return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) # --- Generic views (preferred) --- class PostListCreateView(generics.ListCreateAPIView): queryset = Post.published.select_related('author') serializer_class = PostSerializer permission_classes = [permissions.IsAuthenticatedOrReadOnly] def perform_create(self, serializer): serializer.save(author=self.request.user) class PostRetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView): queryset = Post.published.all() serializer_class = PostSerializer permission_classes = [permissions.IsAuthenticatedOrReadOnly] def perform_update(self, serializer): serializer.save(author=self.request.user)
Result
Open