flask restful 초기 환경 셋팅 리뷰
개발환경 : pycharm community
DB : mysql(bitnami)
tools : postman, SQLyog
1. 프로젝트 생성

2. 터미널에서 필요한 것들 설치
pip install flask-restful
pip install flask
pip install flask-mysql
3. 디렉토리 생성

4.
wsgi.py 생성하고 내용 대강 작성
이 상태일때는 __init__이 없기 때문에 app 임포팅이 안돼서 오류가 난다.
곧 생성할 예정이기 때문에 일단 입력
5000번 포트를 이미 사용중이라면 다른 포트로 띄워도 무방하다
포트를 지정하지 않는다면 자동으로 5000번으로 잡힌다.
가끔 서버에서 급하게 소스까서 포트만 바꿔줄때도 있기 때문에 예의상(ㅎ...) 입력해주었다

# -*- coding: utf-8 -*-
from api import *
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True, port=5000)
5.
__init__.py 생성하고 간단하게 내용 작성
내용 작성 후에 오른쪽 상단에서 wsgi 선택하고 RUN 해준다
다른 예제에서는 굳이 wsgi나 init을 사용하지 않는것 같이 보였는데
uwsgi 연결하고 nginx 로 배포하려면 이쪽이 편하다고 생각해서(사실 다른 방법은 잘 모름) 이렇게 만들었다

from flask_restful import Resource, Api, reqparse
from flaskext.mysql import MySQL
from flask import Flask
app = Flask(__name__)
api = Api(app)
class CreateBookList(Resource):
def post(self):
parser = reqparse.RequestParser()
parser.add_argument('book_name', type=str)
parser.add_argument('author', type=str)
args = parser.parse_args()
_book_name = args['book_name']
_author = args['author']
return {"book_name": _book_name, "author": _author}
api.add_resource(CreateBookList, '/insert')
6.
테스트
포스트맨으로 간단하게 테스트만 해보았다
이 상태일때는 DB와 무방하게 데이터만 받아서 리턴해준다
사실 대충 jsonify로 리턴받아서 보려고 설치했는데 args는 안받아짐(간략한 꾀는 통하지 않음 ㅠㅠ)

7.
테이블을 대충 생성해준다
CREATE TABLE booklist (
book_id INT NOT NULL AUTO_INCREMENT,
book_name VARCHAR(200) NULL,
author VARCHAR(50) NULL,
PRIMARY KEY (book_id));
8.
프로시져도 생성해준다... 오타주의 ㅠ...
오타때문에 한 다섯번 다시 만들었다 ㅎ...
프로시저는 제가 쓴게 아니고 구글링해서 찾은겁니다.. 프로시저알못이라 ㅠㅡㅠ
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_insert_book`(
IN p_book_name VARCHAR(200),
IN p_author VARCHAR(50)
)
BEGIN
IF ( SELECT EXISTS (SELECT 1 FROM booklist WHERE book_name = p_book_name) ) THEN
SELECT 'book name exists !!';
ELSE
INSERT INTO booklist
(
book_name,
author
)
VALUES
(
p_book_name,
p_author
);
END IF;
END$$
DELIMITER ;
9.
DB 정보 추가하고 간단하게 입력을 받는다
에러 나오는대로 다 체크하려고 exception 처리는 아직 하지 않았다
from flask_restful import Resource, Api, reqparse
from flaskext.mysql import MySQL
from flask import Flask
app = Flask(__name__)
api = Api(app)
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = '123456'
app.config['MYSQL_DATABASE_DB'] = 'mysql'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)
class CreateBookList(Resource):
def post(self):
parser = reqparse.RequestParser()
parser.add_argument('book_name', type=str)
parser.add_argument('author', type=str)
args = parser.parse_args()
_book_name = args['book_name']
_author = args['author']
conn = mysql.connect()
cursor = conn.cursor()
cursor.callproc('sp_insert_book', (_book_name, _author))
data = cursor.fetchall()
if not data:
conn.commit()
return {"status_code": "200", "message": "success"}
else:
return {"status_code": "500", "message": "fail"}
api.add_resource(CreateBookList, '/insert')
9.
포스트맨으로 입력 고고

10.
같은 책 제목으로 다시 입력해서 안(?) 들어가나 확인해준다

11.
DB에 잘 들어왔나 확인은 해줘야한다

끗..... 은 아니고
다음편은 db 분리 등등..... 언젠가 할 수 있겠지 ㅠ_ㅠ
'Python-Framework > Python-Framework__Flask' 카테고리의 다른 글
Flask api query string (0) | 2019.09.25 |
---|---|
flask restful crud (0) | 2019.07.25 |
Flask pymysql + RestApi (0) | 2019.04.26 |
flask에서 html 페이지 띄우기 (0) | 2019.03.20 |
flask centos 에서 실행하기 (0) | 2019.03.20 |