[Django REST API] Views

[Views]

Function based view

Class based view

Generic view

Viewset

Model views


[Function based view]

@api_view(['GET', 'POST'])

def hello_world(request):

    if request.method == 'POST':

        return Response({"message": "Got some data!", "data": request.data})

    return Response({"message": "Hello, world!"})



[Class based view]


from rest_framework.views import APIView

from rest_framework.response import Response

from rest_framework import authentication, permissions

from django.contrib.auth.models import User


class ListUsers(APIView):

    """

    View to list all users in the system.


    * Requires token authentication.

    * Only admin users are able to access this view.

    """

    authentication_classes = [authentication.TokenAuthentication]

    permission_classes = [permissions.IsAdminUser]


    def get(self, request, format=None):

        """

        Return a list of all users.

        """

        usernames = [user.username for user in User.objects.all()]

        return Response(usernames)



[Generic views]


class UserList(generics.ListCreateAPIView):

    queryset = User.objects.all()

    serializer_class = UserSerializer

    permission_classes = [IsAdminUser]


    def list(self, request):

        # Note the use of `get_queryset()` instead of `self.queryset`

        queryset = self.get_queryset()

        serializer = UserSerializer(queryset, many=True)

        return Response(serializer.data)


path('users/', ListCreateAPIView.as_view(queryset=User.objects.all(), serializer_class=UserSerializer), name='user-list')



[Viewset]


class UserViewSet(viewsets.ViewSet):

    """

    Example empty viewset demonstrating the standard

    actions that will be handled by a router class.


    If you're using format suffixes, make sure to also include

    the `format=None` keyword argument for each action.

    """


    def list(self, request):

        pass


    def create(self, request):

        pass


    def retrieve(self, request, pk=None):

        pass


    def update(self, request, pk=None):

        pass


    def partial_update(self, request, pk=None):

        pass


    def destroy(self, request, pk=None):

        pass



[Model viewset]


class BoardViewSet(viewsets.ModelViewSet):


    authentication_classes = [TokenAuthentication]

    permission_classes = [IsAuthenticated]

    renderer_classes = [JSONRenderer]


    queryset = models.Board.objects.all()

    serializer_class = serializers.BoardSerializer

    filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]

    filterset_fields = '__all__'

    search_fields = ['title']

    ordering_fields = '__all__'

    ordering = ['created']


댓글

이 블로그의 인기 게시물

[Django Install] 9.1 sc제일은행 nginx-django 연결

[Django APP] django-widget-tweaks

[Django App] django-user-agents