[drf | agiliq] A Simple API with pure Django
A simple API with pure Django
이 장에서는 순수한 Django로 API를 빌드합니다. Django Rest Framework (또는 다른 라이브러리)를 사용하지 않습니다.
The endpoints and the URLS
API에는 JSON 형식으로 데이터를 반환하는 두 개의 엔드 포인트가 있습니다.
/polls/
GETs list ofPoll
- 리스트로 받아옴/polls/<id>/
GETs data of a specificPoll
- 단건으로 받아옴
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"))}
반환해줘요.
JsonResponse
는 HttpResponse
와 비슷해요. 구조적으로 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를 사용할 것입니다.
Author And Source
이 문제에 관하여([drf | agiliq] A Simple API with pure Django), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyeseong-dev/a-7jdk02ve저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)