DRF - Requests and Responses

Keunjae Song·2020년 6월 16일
0

django

목록 보기
1/1

DRF tutorial 2: Requests and Responses를 읽고 정리한 글입니다.

특징 1: 단 하나의 타입에만 국한되지 않음.

DRF의 RequestResponse 오브젝트를 이용하면 단 하나의 타입에만 맞추어 request와 response를 처리하지 않을 수 있다.

즉, json 타입의 request만 처리하거나 혹은 form 타입의 request만 처리하거나 하지 않고, 유효한 모든 타입의 request를 처리할 수 있다는 것이다.(단, 요청 data의 포맷이 정확하다는 가정 하에)

아래는 DRF 튜토리얼 문서의 view에 대한 코드이다.

@api_view(['GET', 'PUT', 'DELETE'])
def snippet_detail(request, pk):
    """
    Retrieve, update or delete a code snippet.
    """
    try:
        snippet = Snippet.objects.get(pk=pk)
    except Snippet.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method == 'GET':
        serializer = SnippetSerializer(snippet)
        return Response(serializer.data)

    elif request.method == 'PUT':
        serializer = SnippetSerializer(snippet, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    elif request.method == 'DELETE':
        snippet.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

여기서 request.data는 클라이언트의 request에 담긴 json 포맷의 데이터 혹은 그 이외의 유효한 포맷의 데이터들을 처리할 수 있다.
또한 response 오브젝트도 data(여기서는 serializer.data)와 함께 반환하고 있으며 REST framework에게 response를 알아서 알맞은 타입으로 렌더링하도록 맡기고 있다.

특징 2: format suffix

format suffix를 사용하면
http://example.com/api/items/4.json과 같이 말 그대로 형식 접미사가 붙은 URL로 API를 사용할 수 있다.

이를 가능하게 하기 위해선 아래와 같은 작업을 수행해야 한다.

  1. view function argument에 format=None 추가하기
    DRF 튜토리얼 문서에는 아래와 같이 추가하라고 나와있다.
def snippet_list(request, format=None):
  1. app/urls.py 파일에 format_suffix_patterns 추가하기
    DRF 튜토리얼 문서에는 아래와 같이 추가하라고 나와있다.
from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from snippets import views

urlpatterns = [
    path('snippets/', views.snippet_list),
    path('snippets/<int:pk>', views.snippet_detail),
]

urlpatterns = format_suffix_patterns(urlpatterns)

이렇게 format suffix를 추가하면,
http://127.0.0.1:8000/snippet.json 형태의 URL을 이용한 API 사용이 가능해진다.

0개의 댓글