[Django] Response JSON

cheon2308
|2022. 10. 20. 16:06
728x90

이전 글에서 알아보았던 JSON 형태로의 서버의 응답 변화와 다양한 방법의 JSON 응답에 대해 알아보자.

 

 

목차

  1. Intro
  2. Response

1. Intro

 

서버가 응답하는 것
  • 현재까지의 Django로 작성한 서버는 사용자에게 페이지(html)만 응답하고 있었음
  • 하지만 사실 서버가 응답할 수 있는 것은 페이지뿐만 아니라 다양한 데이터 타입을 응답할 수 있음

페이지(html)를 응답하는 서버

 

JSON 데이터를 응답하는 서버로의 변환

 

이런 과정을 거치게 된다면 사용자에게 보여질 화면은 누가 구성하게 되는 걸까?

 

  • JSON 데이터를 받아 화면을 구성하여 사용자에게 보여주는 것은 Front-end Framework가 담당할 예정

 

  • Front-end Framework는 Vue.js를 사용
  • Django는 더 이상 Template 부분에 대한 역할 담당 x 

 

 


2. Response

 

JSON 데이터를 응답하는 방법엔 4가지 방법이 있다.


  1. HTML 응답

  • 문서 한 장을 응답하는 서버 확인
  • 지금까지 해오던 방식

응답 페이지 확인

※ 참고 - 'Content-Type' entity header

  • 리소스의 media type(MIME type, content type)을 나타내기 위해 사용
  • 응답 내에 있는 컨텐츠의 콘텐츠 유형이 실제로 무엇인지 알려줌

 

  2. JsonResponse()를 사용한 JSON 응답

  • 이제는 문서 한 장이 아닌 JSON 데이터를 응답해보기
  • Django가 기본적으로 제공하는 JsonResponse 객체 활용하여 Python 데이터 타입을 손쉽게 JSON으로 변환하여 응답 가능
  • JsonResponse()
    1. Json-encoded response를 만드는 클래스 
    2. 'safe' parameter
      • 기본 값 True
      • False로 설정 시 모든 타입의 객체를 serialization 할 수 있음
      • 그렇지 않으면 dict 인스턴스만 허용)

 


3. Django Serializer를 사용한 JSON 응답

  • Django의 내장 HttpResponse()를 활용한 JSON 응답
  • 이전에는 JSON의 모든 필드를 하나부터 열까지 작성해야 했지만 이제는 그렇지 않음

 

Serialization

 

  • "직렬화"
  • 데이터 구조나 객체 상태를 동일 혹은 다른 컴퓨터 환경에 저장하고, 나중에 재구성할 수 있는 포맷으로 변환하는 과정
    • 즉, 어떠한 언어나 환경에서도 "나중에 다시 쉽게 사용할 수 있는 포맷으로 변환하는 과정"
  • 변환 포맷은 대표적으로 json, xml, yaml이 있으며 json이 가장 보편적으로 쓰임

 

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

 

 

4. Django REST framework를 사용한 JSON 응답

 

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

 

  • ModelForm과 유사한 ModelSerializer 구조 및 사용법 확인하기

 

  • JSON 데이터를 DRF 전용 템플릿으로 응답한다.

728x90

'Back-end > Django' 카테고리의 다른 글

[Django] REST framework - N:1 Relation  (0) 2022.10.20
[Django] Rest framework-Single Model  (0) 2022.10.20
[Django] REST API  (0) 2022.10.18
[DB with Django] M:N (User - User)  (0) 2022.10.13
[DB with Django] M:N (Article - User)  (0) 2022.10.13