[TIL] Django: JSON, request.body

Jene Hojin Choi·2021년 2월 21일
1

Django

목록 보기
8/12
post-thumbnail

1. JSON

  • JSON (JavaScript Object Notation)은 데이터를 자바스크립트 객체 타입으로 전달될 수 있게끔하는 문자열 데이터 표현식이다.

  • JSON은 그렇다면 JavaScript일까? 아니다. 그냥 JSON을 보내면 JavaScript가 타입을 인지 못하는 경우가 발생할 수 있습니다. 따라서 JSON을 가장 일반적인 데이터 타입인 문자열 (string)으로 사용한다.

2. import json

  • Django에서 우리는 클라이언트와 JSON 데이터를 주고 받아야할때가 있다. 그럴때 우리는 python의 내장 모듈인 json을 사용해야한다.
  • Serialization: Python 객체 -> JSON 데이터
  • Deserialization: JSON 포맷 데이터 -> Python 객체

3. data=json.loads(request.body)

json.loads() method can be used to parse a valid JSON string and convert it into a Python Dictionary.

json.loads()는 JSON string을 파이썬의 dictionary로 파싱(parsing)해준다. parameter로는 bytes 타입을 받는다.

type(request.body), type(data)

그렇다면 data와 request.body의 타입은 무엇일까?

내가 가지고 있는 views.py에서 어떤 식으로 출력이 되는지 알아보았다.
다음과 같이 request를 보냈다. 참고로 주소는 가짜다 ^^ 내 주소 아님.

그리고 views.py에서 data=json.loads(request.body)를 이용하여 데이터를 받았다.

차례대로 request.body, type(request.body), data, type(data) 를 프린트해보았다.

  • request.body 는 class 'bytes' 이다!
  • JSON으로 담은 데이터는 class 'dict'이다!

4. request.data vs request.body

그렇다면 왜 request.body를 쓰는 것일까? request.data 는 안될까?

request.data in DRF vs request.body in Django

request.body is bytes, which is always available, thus there is no limit in usage.

request.data is a "property" method and can raise an exception, but it gives you parsed data, which are more convenient

request.body 는 class byte이기 때문에 쓰임새에 제약이 없지만, request.data 는 Exception error를 줄 수 있다고 한다.

0개의 댓글