[drf | agiliq] A Simple API with pure Django

9619 단어 agiliqdjangodrfagiliq

A simple API with pure Django

이 장에서는 순수한 Django로 API를 빌드합니다. Django Rest Framework (또는 다른 라이브러리)를 사용하지 않습니다.

The endpoints and the URLS

API에는 JSON 형식으로 데이터를 반환하는 두 개의 엔드 포인트가 있습니다.

  • /polls/ GETs list of Poll - 리스트로 받아옴
  • /polls/<id>/ GETs data of a specific Poll - 단건으로 받아옴

Connecting urls to the views

FBV 2개를 view에 작성하고 이를 연결할 urls.py를 작성할게요. 우선 구조만 만들도록 할게요.

polls/views.py

def polls_list(request):
    pass

def polls_detail(request, pk):
    pass

polls/urls.py

from django.urls import path
from .views import polls_list, polls_detail

urlpatterns = [
    path("polls/", polls_list, name="polls_list"),
    path("polls/<int:pk>/", polls_detail, name="polls_detail")
]

Writing the views

pass로 놔뒀던 함수를 작성해볼게요.

polls/views.py

from django.shortcuts import render, get_object_or_404
from django.http import JsonResponse

from .models import Poll

def polls_list(request):
    MAX_OBJECTS = 20
    polls = Poll.objects.all()[:MAX_OBJECTS]
    data = {"results": list(polls.values("question", "created_by__username", "pub_date"))}
    return JsonResponse(data)


def polls_detail(request, pk):
    poll = get_object_or_404(Poll, pk=pk)
    data = {"results": {
        "question": poll.question,
        "created_by": poll.created_by.username,
        "pub_date": poll.pub_date
    }}
    return JsonResponse(data)

위 소스코드는 일반적인 장고로 만들어졌어요.
polls = Poll.objects.all()[:20]은 DB에 등록된 20개 Poll객체를 가져오게되요.
그리고 JsonResponse를 이용해서 딕셔너리{"results": list(polls.values("question", "created_by__username", "pub_date"))} 반환해줘요.

JsonResponseHttpResponse 와 비슷해요. 구조적으로 content-type=application/json.이렇게 생겼어요.

polls_detail함수는 get_object_or_404(Poll, pk=pk)를 이용해서 구체적인 Poll 모델의 객체 단건을 뽑아오고 JsonResponse에 싸서 다시 반환해줘요.

Using the API

이제 curl, wget, postman, 브라우저 또는 기타 API 사용 도구를 사용하여 API에 액세스 할 수 있습니다. 여기에 컬에 대한 응답이 있습니다

$ curl http://localhost:8000/polls/

{"results": [{"pk": 1, "question": "What is the weight of an unladen swallow?", "created_by__username": "shabda", "pub_date": "2018-03-12T10:14:19.002Z"}, {"pk": 2, "question": "What do you prefer, Flask or Django?", "created_by__username": "shabda", "pub_date": "2018-03-12T10:15:55.949Z"}, {"pk": 3, "question": "What is your favorite vacation spot?", "created_by__username": "shabda", "pub_date": "2018-03-12T10:16:11.998Z"}]}

아래는 POSTMAN에서 확인 한 사진입니다.

Why do we need DRF?

(DRF = Django Rest 프레임 워크)

DRF를 사용하지 않고 Django만으로 API를 빌드 할 수 있었는데 왜 DRF가 필요한가요? 거의 항상 액세스 제어, 직렬화, 속도 제한 등과 같은 API에 대한 일반적인 작업이 필요합니다.

DRF는 API를 빌드하기 위해 잘 고안된 기본 구성 요소와 편리한 후크 포인트 세트를 제공합니다. 나머지 장에서는 DRF를 사용할 것입니다.

좋은 웹페이지 즐겨찾기