반응형
이번 포스팅은 DB와 연결하여 클라이언트가 값을 넣는 방법을 설명합니다.
DB 연동 과정은 이전 포스팅을 참고해주세요.
https://luvris2.tistory.com/182
Visual Studio Code
API 서버 구축
- 메인 파일 : app.py
- 서버 URL : 로컬호스트/recipes
# app.py
from flask import Flask
from flask_restful import Api
from resources.recipe import RecipeListResource
app = Flask(__name__)
api = Api(app)
# 경로와 리소스(api코드) 연결
api.add_resource(RecipeListResource, '/recipes')
if __name__ == '__main__' :
app.run()
기능 설계
- 추가 리소스 파일 : recipe.py
- 클라이언트에서 입력한 값을 DB에 저장하는 코드
- request.get_json() : 클라이언트에서 입력한 값(키:밸류) 호출
- json으로 호출한 데이터를 이용하여 DB에 데이터 생성 (data=request.get_json -> data 변수 이용)
from flask import request
import mysql.connector
from flask_restful import Resource
# DB 연결, 개인의 환경에 맞게 설정
connection = mysql.connector.connect(
host='host',
database='DB',
user='user_name',
password='user_pwd' )
# API를 만들기 위한 클래스 작성
# 클래스 : 변수와 함수로 구성된 묶음
# 클래스는 상속이 가능
# API를 만들기 위한 클래스는 flask_restful 라이브러리의 Resource class를 상속해서 생성하여야 함
class RecipeListResource(Resource) :
# restful api의 methods에 해당하는 함수 작성
def post(self) :
# api 실행 코드를 여기에 작성
# 클라이언트에서 body 부분에 작성한 json을 받아오는 코드
data = request.get_json()
try :
# DATA INSERT
# 1. Connect DB
connection = get_connection()
# 2. SQL Query
query = '''
insert into recipe
(name, description, cook_time, direction)
values
(%s, %s, %s, %s);
'''
record = (data['name'], data['description'], data['cook_time'], data['direction'] )
# 3. Get Cursor
cursor = connection.cursor()
# 4. Execute Query with cursor
cursor.execute(query, record)
# 5. DATA commit
connection.commit()
# 6. Close Resource
cursor.close()
connection.close()
except mysql.connector.Error as e :
print(e)
cursor.close()
connection.close()
return {"error" : str(e)}, 503 #HTTPStatus.SERVICE_UNAVAILABLE
return {"result" : "success"}, 200
POSTMAN
API 기능 테스트
- POST - 로컬호스트/recipes
- Body - raw - JSON
- 코드 입력 후 Send
MySQL
- 생성 확인 : select * from recipe
중복 입력 못하게 하기
MySQL - 테이블 설정
- name 컬럼에 UQ (고유 값) 부여
POSTMAN
- 중복 값 입력되는지 테스트
반응형