[django] 단순 메모용 정리

유동헌·2021년 11월 24일
0

request

json.loads(request.body)

data = json.loads(request.body)
  • json이라는 자료형에 loads, 즉 짐을 실어서 보낸다는 뜻. 파라미터로는 request.body에 있는 것을 실어서 보내게 된다.
  • json으로 문자열을 읽을 땐 loads, 파일을 읽을 땐 load를 쓴다.
  • json.loads()는 JSON string을 파이썬의 dictionary로 파싱(parsing)해준다. parameter로는 bytes 타입을 받는다.

출처 : https://ko.wikipedia.org/wiki/JSON

JSON(제이슨[1], JavaScript Object Notation)은 속성-값 쌍( attribute–value pairs and array data types (or any other serializable value)) 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. 비동기 브라우저/서버 통신 (AJAX)을 위해, 넓게는 XML(AJAX가 사용)을 대체하는 주요 데이터 포맷이다. 특히, 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있다. 자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합하다.

본래는 자바스크립트 언어로부터 파생되어 자바스크립트의 구문 형식을 따르지만 언어 독립형 데이터 포맷이다. 즉, 프로그래밍 언어나 플랫폼에 독립적이므로, 구문 분석 및 JSON 데이터 생성을 위한 코드는 CC++C#자바자바스크립트파이썬 등 수많은 프로그래밍 언어에서 쉽게 이용할 수 있다.

JSON 포맷은 본래 더글라스 크록포드가 규정하였다. RFC 7159와 ECMA-404 그리고 ISO/IEC 21778:2017[2] 표준에 의해 기술되고 있다. KS 부합화 표준은 아직 제정되지 않았으며, TTA 협회 표준명은 TTAE.OT-10.0394이다. ECMA 표준과 ISO/IEC 표준은 문법만 정의할 정도로 최소한으로만 정의되어 있는 반면 RFC는 시맨틱, 보안적 고려 사항을 일부 제공 한다.[3] JSON의 공식 인터넷 미디어 타입은 application/json이며, JSON의 파일 확장자는 .json이다.

Error Handling

프리온보딩 과정을 진행하면서 팀원들에게 배운 점이 많지만 그 중 하나를 꼽지만 어떤 상황이 와도, 어떤 요청이 와도, 어떤 파라미터가 와도 서비가 터지가 하지 않게 설계한다는 점이다. 모두 다 그렇게 노력을 한다는 점이다. 나는 사실 기능 구현에만 급급했기에.. 많이 배웠다. 그 밖에 내가 짠 코드를 다양하게 실험하면서 에러를 추적하는 습관을 길러야겠다!

except TypeError:
	return JsonResponse({'message' : 'TYPE_ERROR'}, status=400)
  • 타입 에러를 반환한다. json을 사용해 통신을 하고 있다면, dictionary + string으로 들어와야 하는데 그렇지 않았을 때에 에러를 잡아준다.
except json.JSONDecodeError:
	return JsonResponse({'message' : 'JSONDecodeError'}, status = 400)
  • json 형식 자체를 검사한다. 즉 딕셔너리 형태로 들어오지 않으면 에러를 발생시킨다.

requests 사용하기

  • 설치
pip install requests
  • 쉘에서 임포트
import requests, json
  • 사용
In [4]: url = requests.get("[https://dev.mycar.cardoc.co.kr/v1/trim/15000](https://dev.mycar.cardoc.co.kr/v1/trim/15000)")

In [5]: text = url.json

In [6]: text

Out[6]: <bound method Response.json of <Response [200]>>

In [7]: text = url.json()

In [8]: text

Out[8]:
{'brandId': 4,
'brandName': 'BMW',
'brandNameEng': 'BMW',
'country': 'DEU',
'isImported': True,
'brandImageUrl': '[http://file.carisyou.com/upload/2020/04/03/FILE_202004031126290740.png](http://file.carisyou.com/upload/2020/04/03/FILE_202004031126290740.png)',
'brandUrl': '[http://www.bmw.co.kr/](http://www.bmw.co.kr/)',
'modelId': 122,
  • requests 라이브러리에는 URL을 매개 변수로 취한 다음 GET 요청을 지정된 URL로 보내는 get()이라는 메서드가 있다. 서버에서 받은 응답은 내가 지금 설정한 url로 지정된다.
  • url 변수 내에 저장된 이 응답은 url.text 와 같은 .text, json, json() 메서드를 사용하여 각각의 자료형으로 변환이 가능하다. 그런 다음 결과를 text 변수에 저장한다.
  • json 모듈은 loads() 라는 메서드와 함께 제공되며 loads()의 s는 문자열을 나타낸다. 문자열 데이터를 JSON으로 변환하게 싶기 때문에 이 방법을 사용할 것 이 메서드 내에서 문자열 데이터 json.loads(text)를 포함하는 text 변수를 전달하는 data 변수에 저장해야 함

키 값으로 가져올 수 있음

In [17]: url = requests.get("https://dev.mycar.cardoc.co.kr/v1/trim/15000")

In [18]: json_data = url.json()

In [19]: json_data['spec']
Out[19]:
{'imageUrl': 'http://file.carisyou.com/newcar/spec/4055_bmw_granturismo2011_spec0.jpg',
 'fuel': {'name': '연비',
  'fuel': {'name': '연료',
   'value': 'Gasoline',
....

In [20]: json_data['spec']['driving']
Out[20]:
{'name': '구동',
 'type': {'name': '구동방식',
  'value': 'AWD',
  'unit': '',
  'multiValues': '2WD,4WD,AWD,FF,FR,RR,MR'},
 'frontTire': {'name': '타이어 전',
  'value': '245/45R19',
  'unit': '',
  'multiValues': ''},
....

In [22]: json_data['spec']['driving']['rearTire']
Out[22]: {'name': '타이어 후', 'value': '275/40R19', 'unit': '', 'multiValues': ''}

출처 : https://velog.io/@hojin11choi/TIL-Django-JSON-request.body

출처 : https://www.delftstack.com/ko/howto/python/python-get-json-from-url/

profile
지뢰찾기 개발자

0개의 댓글