DRF (Django REST Framework)
- Web API 구축을 위한 강력한 toolkit을 제공
- REST framework 개발에 필요한 다양한 기능을 제공
Serialization (직렬화)
- 데이터 구조나 객체 상태를 동일하거나 다른 컴퓨터 환경에 저장하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정
- 예를 들어 DRF의 Serializer는 Django의 Queryset및 Model Instance와 같은 복잡한 데이터를, JSON, XML 등의 유형으로 쉽게 변환할 수 있는 Python 데이터 타입으로 만들어 줌
- DRF의 Serializer는 Django의 Form 및 ModelForm 클래스와 매우 유사하게 작동
Django와의 비교
Django | DRF | |
---|---|---|
Response | HTML | JSON |
Model | ModelForm | ModelSerializer |
api_view decorator
ref : https://www.django-rest-framework.org/api-guide/views/#api_view
- view 함수가 응답해야하는 http method 목록을 설정
- 작성하지 않으면 기본적으로 GET 메서드만 허용되며, 목록에 작성되지 않은 method일 경우 405 Method Not Allowed를 반환
DRF 예시
Django에서 Json으로 변환해서 응답해주는 3가지 방법
- 기존 html을 렌더링 하는 Django
from django.shortcuts import render
from .models import Article
def article_html(request):
articles = Article.objects.all()
context = {
'articles': articles,
}
return render(request, 'articles/article.html', context)
- Json 객체를 직접 만들어서 리턴 받는 방법
from django.http.response import JsonResponse
from .models import Article
def article_json_1(request):
articles = Article.objects.all()
articles_json = []
for article in articles:
articles_json.append(
{
'id': article.pk,
'content': article.content,
}
)
# 딕셔너리가 아닌 다른 타입이 파싱이 되어야 한다면 'safe=False' 옵션 필요
# articles_json은 현재 리스트 타입이기 때문
return JsonResponse(articles_json, safe=False)
- Django에서 제공하는
serializers
모듈을 활용한 Json 객체 변환 - ref : https://docs.djangoproject.com/en/3.2/topics/serialization/
from django.http.response import HttpResponse
from django.core import serializers
from .models import Article
def article_json_2(request):
articles = Article.objects.all()
data = serializers.serialize('json', articles)
# 이미 Json 데이터이므로 Http로 응답을 보내기 위한 HttpResponse
# 응답하는 데이터 타입을 작성해줘야 함
return HttpResponse(data, content_type='application/json')
Django Rest Framework
의ModelSerializer
를 사용한 Json 객체 변환- ref : https://www.django-rest-framework.org/
# views.py
from rest_framework.response import Response
from rest_framework.decorators import api_view
from .models import Article
from .serializers import ArticleSerializer
@api_view(['GET'])
def article_json_3(request):
articles = Article.objects.all()
serializer = ArticleSerializer(articles, many=True)
return Response(serializer.data)
# serializers.py
from rest_framework import serializers
from .models import Article
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = '__all__'
참고사항
- kakao developers REST API 레퍼런스
- ref : https://developers.kakao.com/docs/latest/ko/reference/rest-api-reference
'Web > Django' 카테고리의 다른 글
DRF - 1:N model (0) | 2021.05.09 |
---|---|
DRF - single model (0) | 2021.05.09 |
REST API (0) | 2021.05.08 |
django_09_model_relationship (0) | 2021.04.01 |
django_08_model_relationship (0) | 2021.03.29 |