Django REST Framework - Views

Min-Ho Lee·2020년 11월 23일
0

Django REST Framework

목록 보기
1/1
post-thumbnail

Mon_Nov_23
.
.
.
오늘부터 본격적으로 DRF를 공부하기로 했다.
사실 전부터 조금 보고는 있었으나 방향도 안 잡히고 취업 준비와 병행하다 보니
좀 힘들어서 현업 개발자인 친구가 가이드를 잡아주기로 했다.

일단 다음 스프린트 전까지는 Django Rest Framework에서 API Guide 카테고리 중 7가지 Documents에 대해 공부를 하기로 했다.

  • Views
  • Generic views
  • Viewsets
  • Routers
  • Serializers
  • Serializer fields
  • Serializer relations

시간이 더 남을 수도, 없을 수도 있지만 첫 스프린트라 일단 이대로 공부해보기로 했다.

블로그를 쓰는 이유는 해당 Document를 번역하며 나만의 방식으로 쉽게 풀어쓰려고 하는 것이다. 그래야 나중에 내가 참고하기도 편하고 기억에도 오래 남기 때문이다.

Class-based Views

REST 프레임 워크는 Django의 View 클래스를 하위 클래스로 만드는 APIView 클래스를 제공한다.

APIView 클래스는 다음과 같은 점에서 일반 View 클래스와 다르다.

  1. 핸들러 메서드에 전달 된 요청은 Django의 HttpRequest 인스턴스가 아닌 REST 프레임 워크의 Request 인스턴스입니다.

  2. 핸들러 메서드는 Django의 HttpResponse 대신 REST 프레임 워크의 Response를 반환 할 수 있습니다. 뷰는 콘텐츠 협상을 관리하고 응답에 올바른 렌더러를 설정합니다.

  3. 모든 APIException 예외가 포착되고 적절한 응답으로 조정됩니다.

  4. 들어오는 요청이 인증되고 적절한 권한 및 / 또는 제한 검사가 처리기 메서드에 요청을 발송하기 전에 실행됩니다.

APIView 클래스를 사용하는 것은 일반적인 View 클래스를 사용하는 것과 거의 동일하며, 들어오는 요청은 .get () 또는 .post ()와 같은 적절한 핸들러 메서드로 전달됩니다.

또한 API 정책의 다양한 측면을 제어하는 여러 속성이 클래스에 설정 될 수 있습니다.

예시)

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)

API policy attributes

다음 속성은 API보기의 플러그 가능한 측면을 제어합니다.

.renderer_classes
.parser_classes
.authentication_classes
.throttle_classes
.permission_classes
.content_negotiation_class

API policy instantiation methods

다음 메소드는 REST 프레임 워크에서 다양한 플러그 가능 API 정책을 인스턴스화하는 데 사용됩니다. 일반적으로 이러한 메서드를 재정의 할 필요가 없습니다.

.get_renderers(self)
.get_parsers(self)
.get_authenticators(self)
.get_throttles(self)
.get_permissions(self)
.get_content_negotiator(self)
.get_exception_handler(self)

API policy implementation methods

핸들러 메서드로 디스패치하기 전에 다음 메서드가 호출됩니다.

.check_permissions(self, request)
.check_throttles(self, request)
.perform_content_negotiation(self, request, force=False)

Dispatch methods

다음 메서드는 뷰의 .dispatch () 메서드에 의해 직접 호출됩니다.

.get (), .post (), put (), patch () 및 .delete ()와 같은 핸들러 메서드를 호출하기 전이나 후에 발생해야하는 모든 작업을 수행합니다.

.initial(self, request, *args, **kwargs)

핸들러 메서드가 호출되기 전에 발생해야하는 모든 작업을 수행합니다. 이 방법은 권한 및 제한을 적용하고 콘텐츠 협상을 수행하는 데 사용됩니다.

일반적으로이 메서드를 재정의 할 필요가 없습니다.

.handle_exception(self, exc)

핸들러 메서드에 의해 발생한 모든 예외는이 메서드로 전달되어 Response 인스턴스를 반환하거나 예외를 다시 발생시킵니다.

기본 구현은 rest_framework.exceptions.APIException의 모든 하위 클래스와 Django의 Http404 및 PermissionDenied 예외를 처리하고 적절한 오류 응답을 반환합니다.

API에서 반환하는 오류 응답을 사용자 지정해야하는 경우이 메서드를 하위 클래스로 만들어야합니다.

.initialize_request(self, request, *args, **kwargs)

핸들러 메서드에 전달되는 요청 객체가 Request일반적인 Django가 아닌 의 인스턴스인지 확인합니다 HttpRequest.

일반적으로이 메서드를 재정의 할 필요가 없습니다.

.finalize_response(self, request, response, *args, **kwargs)

Response처리기 메서드에서 반환 된 모든 개체가 콘텐츠 협상에 의해 결정된대로 올바른 콘텐츠 형식으로 렌더링되는지 확인합니다.

일반적으로이 메서드를 재정의 할 필요가 없습니다.

profile
🐇 Rabbit can take a rest, but 🐢 turtle can't

0개의 댓글