Serializer는 마치 django의 form 처럼 역직렬화 과정에서 건내 받은 데이터의 유효성 검사를 한다.
Serializer.data
는 dcit type
이다.
write 모드일 때 커스터마이징을 하려면, Views를 만져줘야하나, Serializers를 만져줘야 하나.
return instance.save()
을 해주므로, 결국 인스턴스 write에 마지막으로 접근하는 것은 seriazlier니깐 그러지 않을까? View까지 공부해보면 해결될 수 있을 것 같다.HttpRequest
를 보다 확장하고 유연한 요청 구문 분석을 제공한다.
request.POST # Only handles form data. Only works for 'POST' method.
request.data # Handles arbitrary data. Works for 'POST', 'PUT' and 'PATCH' methods.
request.data
는 JSON뿐 아니라 다양한 포맷의 요청을 파싱해서 얻은 파이썬의 딕셔너리이다.(type(request.data) == dict
이다) 이것이 유용한 이유는 writing 모드에서 들어온 데이터를 직접 파싱을 하지 않아도 된다는 것이다. 즉, 이전에는 data = JSONParser().parse(request)
라고 직접 입력하였는데, 그럴 필요 없이 request.data
라고 하면 끝이다.
DRF의 Request
를 사용하려면 밑의 3) 을 진행해야한다.
Djanog의 SimpleTamplateResponse
을 상속받아 일종의 TamplateResponse 역할을 한다. content에 대해 올바른 랜더링 타입을 클라이언트에게 리턴해준다. 즉 HttpResponse
, JsonResponse
등을 구분해서 사용하지 않아도 Response
가 결정해준다.
Request
와 마찬가지로 사용하려면 3)을 진행시켜야 한다.
이것엔 두 가지 방법이 있다.
1. @api_view
: FBV용
2. APIView
: CBV용
Request
,Response
기능을 사용할 수 있게 해준다.405 Method Not Allowed
ParseError
http://example.com/api/items/4.json 형식의 url 처리하는 추가 옵션 지정하는 방법. 이것은 필요시 공식 문서를 참고하자.
generics.GenericAPIVew
에 원하는 메서드 Mixin
을 추가하여 사용.
(1) queryset
에 인스턴스 리스트를 모두 가져온다.
(2)serializer_class
를 명시해준다.
(3) 메서드 이름엔 HTTP 메서드이름을 사용하고, Mixin
의 액션 메서드를 리턴하면 된다.
자세한 건 공식 홈페이지에 나와있는 코드를 보면 쉽게 알 수 있다.
Mixins
상속문이 줄어들며, 메서드를 만들 필요도 없다. 1)의 (2)까지만 하면 끝이다.
새로 배운 기능이 많아서 다시 복습하며 정리할 필요가 있음.
from rest_framwork.reverse import reverse
기존의 url을 Response에 담는 역할을 한다.
@api_view(['GET'])
def api_root(request, format=None):
return Response({
'users': reverse('user_list', request=request, format=format),
'snippets': reverse('snippet_list', request=request, format=format)
})
To use a hyperlinked style between entities useHyperlinkedModelSerializer
.
The HyperlinkedModelSerializer
has the following differences from ModelSerializer
:
id
field by default.url
field, using HyperlinkedIdentityField
.HyperlinkedRelatedField
, instead of PrimaryKeyRelatedField
.디폴트 버전
# settings.py
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumerPagination',
'PAGE_SIZE': 10
}
MIXIN
과 GENERICS
가 HTTP 메서드를 메서드로 정의하고 이들이 액션 메서드를 리턴하는 방식을 썼만, ViewSet은 HTTP 메서드를 따로 정의하지 않는다. 액션 메서드 연결을 아예 url에서 actions
코드를 설정함으로써 연결되게 해놨다.