기타 (Other)

[python] Flask 기본 통신 예제

Kim MyeongOk 2024. 11. 9. 21:41
본 포스팅은 파이썬 Flask 라이브러리를 통해 프로젝트간 통신하여 데이터를 주고 받는 기본예제에 대한 내용을 다룹니다.

 

먼저 Flask 라이브러리를 사용하는 프로젝트를 "api" 라고 칭하고, Flask 주소를 호출하는 프로젝트를 "client" 로 지칭하겠습니다.

 

 

# api 예제

from flask import Flask, request, jsonify
import json

app = Flask(__name__)

@app.route('/post/data_post', methods=['POST'])
def api_post():
    json_data = json_loads()
    result = {'msg': 'SUCCESS', 'result': ''}

    if json_data == {}:
        result['msg'] = 'ERROR'
        result['result'] = 'no data'
    else:
        result['result'] = f"post data: {json_data['msg']}"

    return jsonify(json.dumps(result))

def json_loads():
    return json.loads(request.get_data().decode())

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=80)

"""
==================================================================
출력
>> [09/Nov/2024 21:19:33] "POST / HTTP/1.1" 200 -
==================================================================
"""

line 17: jsonify() 함수로 결과를 return 할 경우, json 형태로 전송해야 client 에서 파싱이 가능하므로 json.dumps() 함수를 사용함

 

# client 예제

import json
import requests

localhost = '개인PC_IP주소'
post_url = f"http://{localhost}:80/"
data = {'msg': 'msg_send'}
# data = {} # ver. ERROR test
request_result = requests.post(url=post_url, data=json.dumps(data))

if request_result.status_code == 200:
	# api 프로젝트와 통신 성공
    json_data = json.loads(request_result.json())
    print(f"[{json_data['msg']}] result: '{json_data['result']}'")
else:
	# api 프로젝트와 통신 실패
	print(request_result)

"""
==================================================================
출력
>> [SUCCESS] result: 'post data: msg_send'
==================================================================
"""

 

line 8: requests.post() 함수는 data만 보내는 것과 files를 보내는 것 등 버전이 다양함

  • url: api를 호출하기 위한 url로 대개 f"http://{localhost}{호출하고자 하는 api 주소}:{api를 실행한 port}"로 구성됨
  • data: json 형식으로 data를 변환하여 전송
  • files: 파일을 전송하고 싶은 경우, 아래와 같이 사용할 수 있음
    • files = {"file": open("example.txt", "rb")}
    • requests.post(post_url, files=files)

line 10: request_result.status_code = 200 # api 프로젝트에서 결과를 잘 보내줬을 경우, request_result.status_code = 200

 

'기타 (Other)' 카테고리의 다른 글

아파치 카프카  (0) 2025.01.21
[python] pandas  (4) 2025.01.09
[python] decorator 예제  (0) 2024.12.07
[python] logging  (0) 2024.12.07
[python] MQTT 예제  (0) 2024.09.22