티스토리 뷰

Django Framework

Django RESTful Framework

lluna 2021. 11. 15. 01:00

REST

Representational State Transfer

  • API Server를 개발하기 위한 소프트웨서 설계 방법론으로 REST 원리르 따르는 시스템을 RESTful 이라고 한다.
  • 정보(URI)와 행위(HTTP Method)를 통해 요청을 보내고, 응답은 JSON으로 표현된 데이터이다.

JSON(Javascript Object Notation) 자바스크립트 객체 표기법

  • 가벼운 데이터 교환 포맷으로 Javascript의 표기법을 따른 단순한 문자열.

Restful API

  • REST 원리를 따라 설계한 API
  • 프로그래밍을 통해 클라이언트의 요청에 JSON을 응답하는 서버를 구성한다.

Response

JsonResponse 오브젝트를 통해 Json 응답을 만든다.

Serialization

  • 데이터 구조나 객체를 저장하고 재구성할 수 있는 포맷으로 변환하는 과정

Serializers in Django

  • 쿼리셋, 모델 인스턴스 등 복잡한 데이터를 JSON, XML 유형으로 쉽게 변환할 수 있는 Python 데이터 타입으로 만들어준다.

django 내장 HTTPResponse를 활용한 JSON 응답

# django 내장 HTTPResponse를 활용한 JSON 응답
# articles/views.py

from django.http.response import JsonResponse, HttpResponse
from django.core import serializers

def article_json(request):
  articles = Article.objects.all()
	data = serializers.serialize('json', articles)
	return HttpResponse(data, content_type='application/json')

django REST framework(DRF) 라이브러리를 사용한 JSON 응답

# django REST framework(DRF) 라이브러리를 사용한 JSON 응답
# articles/serializers.py
# ModelSerializer는 Article 모델에 맞추어 자동으로 필드를 생성하고 serialize 해준다.

from rest_framework import serializers
from . import Article

class ArticleSerializer(serializers.Modelserializer):
  class Meta:
    model = Article
    fields = '__all__'
# DRF의 Response()를 활용해 Serialize된 JSON 객체 응답
# articles/views.py

from rest_framework.decorators import api_view
from rest_framework.response import Response
from .serializers import ArticleSerializer

@api_view()
def article_json(request):
  articles = Article.objects.all()
  serializer = ArticleSerializer(articles, many=True) # 쿼리셋은 many=True 필수
  return Response(serializer.data) # json 응답
# serialized 된 파일을 parsing

import requests
from pprint import pprint

response = requests.get('http://127.0.0.1:8000/api/v1/json/')
data = response.json() # list 타입으로 전송
pprint(data[0]) # 하나의 딕셔너리 객체 출력

Django REST Framework(DRF)

  • Web API 구축을 위한 라이브러리
 

Home - Django REST framework

 

www.django-rest-framework.org

Build RESTful API

# urls.py
urlpatterns = [
  path('articles/', views.article_list),
  path('articles/<int:article_pk>', views.article_detail),
]

두 개의 url로 5개의 API를 만들 수 있다.

1. articles/       전체 글을 조회하고(GET) 새 글을 작성(POST) 할 수 있다.

2. articles/1/    게시글을 조회하고(GET) 수정하고(PUT) 삭제(DELETE)할 수 있다.

댓글