본문 바로가기

BackEnd/Python-Flask

[백엔드] Flask: recipe 프로젝트: API 설계, 새로운 데이터 작성: POST

반응형

레시피의 프로젝트를 진행해보자. 

 

POST: 수정해야지/생성해야지

DELETE: 내가 만든 삭제해야지

PUT: 임시저장한 레시피를 공개해야지

DELETE: 임시저장 해야지( PUT으로 해도 되긴 함). 여기서는 퍼블리싱 하는 것을 삭제한다는 뜻으로 사용한다..

GET: 레시피를 가져온다는 뜻. 

거기에 대한 URL, 클라가 저렇게 요청하면 레시피를 보여주는 것.

 

의미를 보고, 상황을 봐서 명령어를 사용하도록 한다. 정답이 있는 건 아니다. 

 

새로운 레시피 작성 API

recipe.py의 파일을 resource 폴더안에 새로 생성해주고, 윤곽을 잡아준다.

 
from http import HTTPStatus
from flask import request
from flask_restful import Resource
from mysql.connector.errors import Error
from mysql_connection import get_connection
import mysql.connector
from mysql_connection import get_connection

class RecipeListResource(Resource):
    def post(self):
        user_id= get_jwt_identity()
        return

 

그리고, app.py에 가서 윤곽을 잡아주고, 클래스명으로 경로를 잡아준다.

 

 
api = Api(app)
api.add_resource(RecipeListResource,'/recipes')

add_resource(클래스 이름, 경로명)

 

클라이언트에서 받아올 정보를 미리 postman에서 작성해보자.

클라이언트는 상기 형태로, 정보를 보내올텐, 서버에서는 상기정보를 토대로 데이터 처리할 준비를 하면 된다. 

 

vscode에서 실행 코드는 하기와 같다.

  def post(self):
        # 딱 요 형식으로 만들어야 한다. 이게 flask 프레임워크임. 정해져있음.
        # 만든다음에 우리가 작성한 URL에 연결시킬것이다.
        # api 실행 코드를 여기에 작성

        # 1. 쿨라이언트가 body에 보내준 json을 받아온다.
        # body로 받는 데이터는 아래 함수를 사용한다.
       
        # 클라이언트에서, body 부분에 작성한 json을
        # 받아오는 코드
        data = request.get_json()

        user_id= get_jwt_identity()

        # 받아온 데이터를 디비 저장하면 된다.
        try:
            # 데이터 insert
            # 1. DB에 연결
            connection = get_connection()

            # 2. 쿼리문 만들기
            query = '''insert into recipe
                    (name, description, cook_time, directions, user_id)
                    values
                    (%s,%s,%s,%s,%s);'''
            record = (data['name'],data['description'], data['cook_time'],data['directions'], user_id )

            # 3. 커서를 가져온다.
            cursor = connection.cursor()

            # 4. 쿼리문을 커서를 이용해서 실행한다.
            cursor.execute(query,record)

            # 5. 커넥션을 커밋해줘야 한다 => 디비에 영구적으로 반영하라는 뜻
            connection.commit()

            # 6. 자원 해제
            cursor.close()
            connection.close()

        except Error as e:
            print(e)
            cursor.close()
            connection.close()
            return {"error": str(e)}, 503

        return {"result":"success"},200
 

 

 

HTTP 상태코드

HTTPStatus.SERVICE_UNAVAILABLE

= 503

 

일반적으로 그냥 숫자로만 사용한다. 



터미널에서 python app.py로 서버 실행,

postman에서 데이터 입력 후에 send를 눌러준다.

 

상기 코드 실행 후에, 데이터가 잘 들어갔는지, mysql에서 확인한다.

데이터가 잘 입력 되었다.


POST관련 보충 설명: https://yeo0616.tistory.com/172

 

반응형