본 포스팅은 파이썬 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 |