[Django/DB] Response JSON

문지은·2023년 5월 12일
0

Django + Database

목록 보기
9/12
post-thumbnail

지금 까지는 문서(HTML) 한 장을 응답하는 방식으로 JSON 데이터를 응답하였다.
다양한 방법으로 JSON 데이터를 응답하는 방법을 알아보자.

JsonResponse()를 사용한 JSON 응답

  • 이제는 문서(HTML) 한 장을 응답하는 것이 아닌 JSON 데이터를 응답해보기
  • Django가 기본적으로 제공하는 JsonResponse 객체를 활용하여 Python 데이터 타입을 손쉽게 JSON으로 변환하여 응답 가능
# articles/views.py

from django.http.response import JsonResponse

def article_json_1(request):
    articles = Article.objects.all()
    articles_json = []

    for article in articles:
        articles_json.append(
            {
                'id': article.pk,
                'title': article.title,
                'content': article.content,
                'created_at': article.created_at,
                'updated_at': article.updated_at,
            }
        )
        
    return JsonResponse(articles_json, safe=False)

JsonResponse()

  • JSON-encoded response를 만드는 클래스
  • safe’ parameter
    • 기본 값 True
    • False로 설정 시 모든 타입의 객체를 serialization 할 수 있음 (그렇지 않으면 dict 인스턴스만 허용됨)

Django Serializer를 사용한 JSON 응답

  • Django의 내장 HttpResponse()를 활용한 JSON 응답
# articles/views.py

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

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

Serialization

  • 직렬화
  • 여러 시스템에서 활용하기 위해 데이터 구조나 객체 상태를 나중에 재구성할 수 있는 포맷으로 변환하는 과정
    • 즉, 어떠한 언어나 환경에서도 나중에 다시 쉽게 사용할 수 있는 포멧으로 변환하는 과정
  • 변환 포멧은 대표적으로 json, xml, yaml이 있으며 json이 가장 보편적으로 쓰임
  • 데이터 구조나 객체 상태를 나중에 재구성할 수 있는 포맷으로 변환하는 과정

Serializers in Django

  • Django의 serialize()는 Queryset 및 Model Instance와 같은 복잡한 데이터를 JSON, XML 등의 유형으로 쉽게 변환할 수 있는 Python 데이터 타입으로 만들어 줌

Django REST framework를 사용한 JSON 응답

Djnago REST framework (DRF)

  • Django에서 Restful API 서버를 쉽게 구축할 수 있도록 도와주는 오픈소스 라이브러리
  • Web API 구축을 위한 강력한 toolkit 제공
  • REST framework를 작성하기 위한 여러 기능 제공
  • DRF의 serializer는 Django의 Form 및 ModelForm 클래스와 매우 유사하게 작동
  • https://www.django-rest-framework.org/

Django REST framework를 사용한 JSON 응답

  • DRF가 설치되어 있는 것을 확인
# settings.py

INSTALLED_APPS = [
    'articles',
    'django_seed',
    'rest_framework',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
  • ModelForm 과 유사한 ModelSerializer 구조 및 사용법 확인하기
# articles/serializers.py

from rest_framework import serializers
from .models import Article

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields ='__all__'
# articles/views.py
from rest_framework.decorators import api_view
from .serializers import ArticleSerializer
from rest_framework.response import Response

@api_view(['GET'])
def article_json_3(request):
    articles = Article.objects.all()
    serializer = ArticleSerializer(articles, many=True)
    return Response(serializer.data)

profile
코드로 꿈을 펼치는 개발자의 이야기, 노력과 열정이 가득한 곳 🌈

0개의 댓글