장고(django)의 모델(Models)을 JSON으로 응답(Response)하기

2019-06-05

장고(django) 프로젝트에서 API를 사용하여 정보를 전달할 때, 모델(Models)에서 가져온 정보(QuerySet)를 그대로 JSON으로 응답(Response)하는 방법에 대해서 알아봅니다.

개요

장고(django)로 API 서버를 개발하다 보면, 모델(Models)에서 직접 가져온 정보(QuerySet)을 바로 JSON으로 응답하고 싶을 때가 있습니다. 이 블로그 포스트에서는 장고(django)를 이용하여 모델(Models)에서 가져온 정보(QuerySet)을 그대로 JSON으로 보내는 방법에 대해서 알아보겠습니다.

이 블로그에서 사용하는 소스코드는 github에 공개되어 있습니다. 아래에 링크를 통해 확인 가능합니다.

장고(django) 프로젝트 준비

이전 블로그 시리즈에서 장고(django) 프로젝트를 사용하는 방법에 대해서 설명하였습니다. 장고(django)를 사용하여 프로젝트를 구성하는 방법에 대한 자세한 내용은 아래에 링크를 통해 확인하시기 바랍니다.

이 블로그에서는 장고(django) 설치와 프로젝트 설정등에 대해서는 설명하지 않도록 하겠습니다. 간단하게 프로젝트가 진행될 수준으로만 설명하겠습니다.

아래에 명령어를 통해 장고(django) 프로젝트를 생성합니다.

django-admin startproject django_response_model_to_json

아래에 블로그를 참고하여 데이터베이스 연동 및 테이블을 생성합니다.

데이터베이스 연동이 완료되었다면 아래에 명령어를 통해 관리자(superuser)를 생성합니다.

python manage.py createsuperuser

아래에 블로그를 참고하여 Blog 장고(django) 앱(App)과 Post 모델(Model)을 생성합니다.

그리고 아래에 블로그를 참고하여 테스트 데이터를 추가합니다.

URL 작성

이제 테스트 데이터를 가져오기 위한 URL을 생성합니다. 아래에 링크를 통해 자세한 방법을 확인할 수 있습니다.

URL을 작성하기 위해 django_response_model_to_json/urls.py을 열고 아래와 같이 수정합니다.

from django.contrib import admin
from django.urls import path
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]

그리고 Blog 앱에 URL을 추가하기 위해 blog/urls.py을 생성하고 아래와 같이 수정합니다.

from django.urls import path
from . import views

urlpatterns = [
    path('posts/', views.posts, name='posts'),
]

뷰(View) 작성

이제 모델(Models)에서 가져온 데이터(QuerySet)을 JSON으로 반환하기 위한 뷰(View)를 작성해야 합니다. 장고(django)의 뷰(View)에 관해서는 아래에 블로그를 참고하시기 바랍니다.

뷰(View)를 만들기 위해 blog/views.py를 열고 아래와 같이 수정합니다.

from django.shortcuts import render
from django.core import serializers
from django.http import HttpResponse
from .models import Post


def posts(request):
    posts = Post.objects.filter(published_at__isnull=False).order_by('-published_at')
    post_list = serializers.serialize('json', posts)
    return HttpResponse(post_list, content_type="text/json-comment-filtered")
  • from django.core import serializers: 모델(Models)을 JSON 타입으로 데이터를 직렬화 시키기 위해 serializers를 불러옵니다.
  • from django.http import HttpResponse: JSON으로 데이터를 반환(Response)하기 위해 HttpResponse를 사용할 예정입니다.
  • posts = Post.objects.filter(published_at__isnull=False).order_by('-published_at'): Post 모델(Models)을 이용하여 데이터를 가져옵니다.
  • post_list = serializers.serialize('json', posts): 가져온 데이터(QuerySet)를 JSON 타입의 문자열로 변환합니다.
  • return HttpResponse(post_list, content_type="text/json-comment-filtered"): post_list가 JSON 타입의 문자열이므로 따옴표(")를 제거한 JSON을 반환해야 합니다.

확인

지금까지 작업한 내용을 확인하기 위해 장고(django)의 테스트 서버를 실행 시킵니다.

python manage.py runserver

그리고 Postman에서 해당 URL(http://localhost:8000/posts/)을 GET으로 가져오면 아래와 같이 데이터가 잘 가져와지는 것을 확인할 수 있습니다.

장고(django) 모델(Models)을 JSON으로 반환하기 - Postman을 이용한 데이터 확인

책 홍보

저도 블로그를 시작한지 1년만에...책을 다 써봅니다...인생에서 이런 날도 오는군요...타국에서 책 출판도 할 수 있고, 참 좋은 세상입니다.

이번에 쓴 책은 스무디 한 잔 마시며 끝내는 React Native입니다. 다양한 예제를 통해 리액트 네이티브를 공부할 수 있도록 구성해 보았습니다. 또한 설치부터 배포까지 실전에서도 사용할 수 있는 내용들을 담고 있습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.
스무디 한 잔 마시며 끝내는 React Native React Native로 실전 스마트폰 앱 만들기
Buy me a coffeeBuy me a coffee
Posts