Python-Framework/Python-Framework__Flask

flask_restful

말하는감자 2019. 7. 24. 20:36

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