from django.views.generic import View
class APIView(View):
# The following policies may be set at either globally, or per-view.
renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES
parser_classes = api_settings.DEFAULT_PARSER_CLASSES
authentication_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSES
throttle_classes = api_settings.DEFAULT_THROTTLE_CLASSES
permission_classes = api_settings.DEFAULT_PERMISSION_CLASSES
content_negotiation_class = api_settings.DEFAULT_CONTENT_NEGOTIATION_CLASS
metadata_class = api_settings.DEFAULT_METADATA_CLASS
versioning_class = api_settings.DEFAULT_VERSIONING_CLASS
# Allow dependency injection of other settings to make testing easier.
settings = api_settings
as_view(cls, **initkwargs)
setup(self, request, *args, **kwargs)
dispatch(self, request, *args, **kwargs)
handler: http method를 실행하는 generic api view의 메소드
# GET method 호출 시
class ListAPIView(mixins.ListModelMixin,
GenericAPIView):
# get method 호출
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
finalize_response(self, request, response, *args, **kwargs)
응답값에 필요한 메타 정보 생성
response: handler 함수 결과값
if isinstance(response, Response):
if not getattr(request, 'accepted_renderer', None):
neg = self.perform_content_negotiation(request, force=True)
request.accepted_renderer, request.accepted_media_type = neg
response.accepted_renderer = request.accepted_renderer
response.accepted_media_type = request.accepted_media_type
response.renderer_context = self.get_renderer_context()
initialize_request(self, request, *args, **kwargs)
from rest_framework.request import Request
def initialize_request(self, request, *args, **kwargs):
"""
Returns the initial request object.
"""
parser_context = self.get_parser_context(request)
return Request(
request,
parsers=self.get_parsers(),
authenticators=self.get_authenticators(),
negotiator=self.get_content_negotiator(),
parser_context=parser_context
)
initialize(self, request, *args, **kwargs)
handle_exception(self, exc)