APIView, JSON 응답 뷰 만들기

최동혁·2022년 12월 6일
0

DRF

목록 보기
4/19

APIView, JSON 응답 뷰 만들기

Serializer를 통한 뷰 처리

Form 처리와 유사한 방식으로 동작

class PostSerializer(serializers.ModelSerializer):
		class Meta:
		model	=	Post
		fields	=	'__all__'

#	Views
serializer	=	PostSerializer(data=request.POST)

if serializer.is_valid():
		return JsonResonse(serializer.data,	status=201)
return JsonResponse(serializer.errors,	status=400)
  • 위의 코드는 DRF의 기능을 거의 쓰지 않은 것임

DRF의 기본 CBV인 APIView

APIView 클래스 혹은 @api_view 장식자

View에 여러 기본 속성을 부여한다.

  1. renderer_classes : 직렬화 class 다수
  2. parser_classes : 비직렬화 class 다수
  3. authentication_classes : 인증 class 다수
  4. throttle_classes : 사용량 제한 class 다수
  5. permission_classes : 권한 class 다수
  6. content_negotiation_class : 요청에 따라 적절한 직렬화/비직렬화 class를 선택하는 class
  7. metadata_class : 메타 정보를 처리하는 class
  8. versioning_class : 요청에서 API버전 정보를 탐지하는 class

각 옵션의 디폴트 값 (1/2)

  1. renderer_classes
    • rest_framework.renderers.JSONRenderer : JSON 직렬화
    • rest_framework.renderers.TemplateHTMLRendere` : HTML 페이지 직렬화
  2. parser_classes
    • rest_framework.parsers.JSONParser : JSON 포맷 처리
    • rest_framework.parsers.FormParser
    • rest_framework.parsers.MultiPartParser
  3. authentication_classes
    • rest_framework.authentication.SessionAuthentication : 세션에 기반한 인증
    • rest_framework.authentication.BasicAuthentication : HTTP Basic 인증
  4. throttle_classes
    • 빈 튜플

각 옵션의 디폴트 값 (2/2)

permission_classes

  • rest_framework.permissions.AllowAny : 누구라도 접근 허용

content_negotiation_class

  • rest_framework.negotiation.DefaultContentNegotiation
  • 같은 URL로의 요청이지만, JSON응답을 요구하는 것이냐 / HTML응답을 요구하는 것인지 판단

metadata_class

  • rest_framework.metadata.SimpleMetadata

versioning_class

  • None : API 버전 정보를 탐지하지 않겠다.
  • 요청 URL에서, GET인자에서, HEADER에서 버전정보를 탐지하여, 해당 버전의 API뷰가 호출되도록 합니다.
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글