Flask #1_Flask에서 json다루기

Daco·2021년 12월 30일
0

Flask

목록 보기
1/1

Flask도 장고와 마찬가지로 HTTP매서드로 넘어온 헤더나 바디의 값을 불러오고 다시 json형태로 내보내는 기능이 있다.

POST body(json) 가져오기

우선 플라스크는 데코레이터를 통해 HTTP를 수신하므로 URI와 매서드를 적어준다. 그리고 "request.get_json()" 사용하면 body의 json을 불러올 수 있다. (request를 사용하려면 미리 import하는 것을 잊지말자)

# <플라스크 - 제이슨형태 바디 불러오는 방법>
from flask import jsonify, Flask, request

@app.route('/create', methods=['POST'])
def create():
    params = request.get_json()
		# request.get_json()을 사용하면 POST 매서드의 BODY 값을 딕셔너리로 불러 올 수 있다.
		# 장고의 json.loads(request.body)와 동일한 역할

json 형태로 반환하기

그러면 최종적으로 리턴 값을 json형태로 돌려주기 위해서는 어떻게 해야할까? 먼저 장고의 경우를 보자.

<장고의 예>
return JsonResponse({ 'message' : 'ALREDY_EXISTS' }, status = 400)

장고에서는 이렇게 'JsonResponse'을 불러와서 리턴해주어야 하지만, 플라스크의 경우 아래 코드처럼 "jsonify", "json.dumps"등을 사용해서 반환할 수 있다.


# <플라스크 - 제이슨형태로 리턴하는 방법>

# 1번 Flask 1.1.0부터 뷰는 Python dict를 직접 반환가능
@app.route("/summary")
def summary():
    d = make_summary()
    return d

# 2번 jsonify 을 불러와 사용하는 방법
from flask import jsonify

@app.route("/summary")
def summary():
    d = make_summary()
    return jsonify(d)

# 3번 세부 옵션을 설정하는 경우
from flask import json

@app.route('/summary')
def summary():
    data = make_summary()
    response = app.response_class(
        response=json.dumps(data),
        status=200,
        mimetype='application/json'
    )
    return response

# 4번 응답코드를 넣는 경우
from flask import jsonify, make_response

@app.route('/summary')
def summary():
    d = make_summary()
    return make_response(jsonify(d), 200)

여기서 놀라운 점은 1번, Flask 1.1.0버전 이상부터는 따로 json처리를 하지 않아도 알아서 반환해준다는 것이다.

만약 자신이 사용하는 Flask의 버전이 상위 버전이라면 굳이 json형태로 바꿔주는 매서드를 사용하지 않아도 정상적으로 리턴 값이 보내질 것이다.

레퍼런스

참고 글 : https://stackoverflow.com/questions/13081532/return-json-response-from-flask-view
참고 깃헙 : https://github.com/GuMoonTech/forked-cybosplus-python/blob/master/models/stocks/views.py

profile
티스토리 - https://daco2020.tistory.com/

0개의 댓글