Flask에서 JSON 형식의 요청 데이터 처리

Salman Mehmood 2022년8월18일
Flask에서 JSON 형식의 요청 데이터 처리

이 설명을 통해 JSON이 무엇이며 JSON 형식으로 들어오는 요청 데이터를 처리하는 방법을 배웁니다. Postman Chrome 확장 프로그램을 사용하여 JSON 데이터를 보내는 방법도 알아봅니다.

Flask에서 JSON 형식의 요청 데이터 처리

JSON은 데이터를 구조화하기 위한 작고 읽을 수 있는 텍스트 형식입니다. JSON은 JavaScript Object Notation을 의미합니다. 완전히 언어 독립적인 텍스트 형식입니다.

중괄호로 시작하고 끝납니다. JSON 형식은 사람이 읽기에 매우 쉽고 컴퓨터에서도 구문 분석하고 생성하기 쉽습니다.

Flask 앱에 대한 요청 데이터를 구문 분석하는 또 다른 방법이 있으며 이 방법은 JSON 개체를 사용합니다. 이를 시연하기 위해 특정 URL에 HTTP 요청을 보낼 수 있는 Chrome의 도구인 Postman을 사용합니다.

가장 먼저 해야 할 일은 JSON을 처리하기 위한 경로를 만드는 것입니다. 우리는 이것을 /post-data라고 부를 것이며, 이는 POST 요청만 받을 것이지만 HTTP 메소드를 사용하려는 것에 달려 있습니다.

이제 POST_REQ_DATA()라는 메서드를 정의합니다. JSON 객체 jsonify()를 반환하고 이 안에 사전을 넣습니다.

@app.route("/post-data", methods=["POST"])
def POST_REQ_DATA():
    return jsonify({"Post_Request": "Sent"})

Postman으로 이동하여 POST 요청으로 전환하고 /post-data를 입력하고 전송하면 jsonify()를 통해 보낸 출력이 표시됩니다.

Flask 요청 JSON 출력 1

그러나 현재로서는 어떤 종류의 요청 데이터도 받지 않습니다. JSON 요청에 액세스하기 위해 Flask 앱으로 돌아가서 함수 내에서 request.get_json() 메서드를 호출합니다.

이 메서드는 들어오는 JSON 개체를 가져와 Python 데이터 구조로 변환합니다. jsonify()에 전달하면 JSON 개체에서 개체를 찾아 Python 사전으로 변환하고 JSON 개체의 배열은 Python에서 목록으로 변환합니다.

이제 request.get_json()을 사용하여 P_R이라는 객체를 선언한 다음 이를 키로 사용하여 일부 값을 정의하고 jsonify() 메서드 내부에 전달합니다. 이러한 값은 일반 변수여야 합니다.

def POST_REQ_DATA():
    P_R = request.get_json()
    company_name = P_R["company_name"]
    location = P_R["location"]
    userlist = P_R["userlist"]
    return jsonify(
        {
            "Post_Request": "Sent",
            "company_name": company_name,
            "location": location,
            "userlist": userlist[1],
        }
    )

Postman으로 돌아가서 Body 탭을 클릭하고 Raw로 전환한 다음 이 드롭다운 목록에서 JSON 애플리케이션이 Jason MIME 유형으로 선택되어 있는지 확인합니다. 이제 여기에 JSON 쿼리를 작성하고 JSON 데이터를 제공한 후 Send 버튼을 누를 수 있습니다. 응답은 아래에 나와 있습니다.

Flask 요청 JSON 출력 2

Flask 앱의 전체 소스 코드는 다음과 같습니다.

from flask import Flask, jsonify, request

app = Flask(__name__)


@app.route("/post-data", methods=["POST"])
def POST_REQ_DATA():
    P_R = request.get_json()
    company_name = P_R["company_name"]
    location = P_R["location"]
    userlist = P_R["userlist"]
    return jsonify(
        {
            "Post_Request": "Sent",
            "company_name": company_name,
            "location": location,
            "userlist": userlist[1],
        }
    )


# We feed the follwing data inside the postman
# {'company_name':'Delftstack','location':'Netherland','userlist':['Harry Parker','Goerge Wilson']}

if __name__ == "__main__":
    app.run(debug=True)
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn