Django REST framework [제1장~제3장]을 해 보았다

2992 단어 장고REST-API
여기 튜토리얼(1-3장)을 한 개인 기록. (요약이 아닌 메모)

Tutorial 1: Serialization


urls.py , api.py , views.py , models.py , serializer.py
  • Serialization API는 Django 's Forms API와 유사합니다
  • Serializer 클래스는 ModelSerializer를 상속함으로써 간단하게 쓸 수 있습니다.

    Model의 속성에 포함되지 않는 요소를 Serialize 시에 포함하는 것은 가능, 예를 들어
    Model
  • Snippet Model에는 User 속성이 있습니다 (Snippet -> User의 belongs to는 지정됨)
  • User Model에는 Snippet 속성이 없습니다. (User -> Snippet has many는 지정되지 않음)

  • 이때 ModelSerializer
  • SnippetSerializer는 user 속성을 serializers.ReadOnlyField(source='user') 에서
  • User는 UserSerializer를 snippet을 serializers.PrimaryKeyRelatedField()로 당깁니다.



  • Tutorial 2: Requests and Responses



    이 장에서는 function based view(@api_viewデコレータ) 의 구현.
  • return Response(data) 를 사용하면 content negotiation (determine the correct content type to return to the client) 를 쉽게 실현할 수 있다.
  • APIendpoint에 확장자를 추가하는 방법

  • snippets/views.py
    def snippet_list(request, format=None):
    

    snippets/urls.py
    urlpatterns = format_suffix_patterns(urlpatterns)
    
  • 클라이언트로부터의 format의 지정은 HTTP request bodyのAccept:xxx/yyy 인가 endpointの拡張子 로 한다.
  • # Request JSON
    http http://127.0.0.1:8000/snippets/Accept:application/json 
    # Request HTML
    http http://127.0.0.1:8000/snippets/ Accept:text/html         
    
    # JSON suffix
    http http://127.0.0.1:8000/snippets.json
    # Browsable API suffix
    http http://127.0.0.1:8000/snippets.api
    

    (요점 확인) html = api

    Tutorial 3: Class based views



    이 장에서는 Class-based Views(APIViewを継承)로 구현한다. 3단계에 걸쳐 점점 편하게 구현하는 방법을 배웠다.
  • APIView 상속
  • 이 시점에서는 request method 하나당 하나의 method를 준비한다.

  • generics.GenericAPIViewmixins.XxxxModelMixin를 상속.
  • Xxxx = { ListModelMixin, Create, Retrieve, Update, Destroy}

  • generics.ListCreateAPIView 을 계승.

  • 결과, 여기까지 간단하게 되었다.
    from snippets.models import Snippet
    from snippets.serializers import SnippetSerializer
    from rest_framework import generics
    
    
    class SnippetList(generics.ListCreateAPIView):
        queryset = Snippet.objects.all()
        serializer_class = SnippetSerializer
    
    
    class SnippetDetail(generics.RetrieveUpdateDestroyAPIView):
        queryset = Snippet.objects.all()
        serializer_class = SnippetSerializer
    

    좋은 웹페이지 즐겨찾기