APIView, JSON 응답 뷰 만들기
Serializer를 통한 뷰 처리
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = '__all__'
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에 여러 기본 속성을 부여한다.
- renderer_classes : 직렬화 class 다수
- parser_classes : 비직렬화 class 다수
- authentication_classes : 인증 class 다수
- throttle_classes : 사용량 제한 class 다수
- permission_classes : 권한 class 다수
- content_negotiation_class : 요청에 따라 적절한 직렬화/비직렬화 class를 선택하는 class
- metadata_class : 메타 정보를 처리하는 class
- versioning_class : 요청에서 API버전 정보를 탐지하는 class
각 옵션의 디폴트 값 (1/2)
- renderer_classes
• rest_framework.renderers.JSONRenderer : JSON 직렬화
• rest_framework.renderers.TemplateHTMLRendere` : HTML 페이지 직렬화
- parser_classes
• rest_framework.parsers.JSONParser : JSON 포맷 처리
• rest_framework.parsers.FormParser
• rest_framework.parsers.MultiPartParser
- authentication_classes
• rest_framework.authentication.SessionAuthentication : 세션에 기반한 인증
• rest_framework.authentication.BasicAuthentication : HTTP Basic 인증
- 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뷰가 호출되도록 합니다.