인터넷 검색해서 이거저거 보다가..
평소 자주 쓰는 스타일로 수정하면서 따라하다가 간략하게 정리..
여기에 정리 안해두면 내일 다 까먹을 가능성 높음 ㅠㅠ...
PyCharm으로 프로젝트 폴더 open
flask, pymysql을 설치해준다.
settings에서 설치하다가 오류가 발생한 경우 파이참 콘솔의 terminal에서 pip로 설치해주는것이 정신 건강에 이롭다
settings에서 왜 설치할때마다 오류가 나는지 모르겠다
리눅스일때 오류가 난다면 설치 파일 통째로 받아서 설치하는게 가장 편하다
pip install flask
pip install pymysql
__init__.py, database.py, wsgi.py를 생성
wsgi.py 내용을 작성해준다
port 지정 안하면 5000번으로 잡히긴 한데 프로젝트 여러개를 동시해서 띄우는 경우가 많아서 지정 해주었다
# wsgi.py
# -*- coding: utf-8 -*-
from test import *
if __name__ == "__main__"
app.run(host="0.0.0.0", debug=True, port=18080)
__init__.py 내용을 작성해준다
methods를 입력하지 않으면 기본적으로 GET으로 잡히는것 같다(자세히 모름ㅠㅠ)
api를 여러개 작성하다보면 헷갈리는 경우가 있기 때문에 명시해 주는 것이 편한것 같다
# __init__.py
# -*- coding: utf-8 -*-
from flask import Flask
app = Flask(__name__)
@app.route("/hi", methods=["GET"])
def hi():
return "hi"
여기까지 작성해두고 wsgi.py를 실행한다
그 다음에 크롬을 켜고 localhost:18080/hi로 접속해본다
__init__.py에서 /hi로 접속하면 hi라는 스트링이 리턴되게 해두었으므로 당연히 hi라는 두글자만 보인다
test_table을 생성해준다
CREATE TABLE test_table(
idx INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
test VARCHAR(256) NOT NULL
) CHARSET=utf8;
database.py를 간략하게 작성해준다
mysql 설치 실패로 비트나미를 사용했다.
비트나미 설치는 간단하고 편한데 db 입출력이 기하급수적으로 늘어나면(몇천개 이상) 가끔 db 자체가 뻗는 경우가 발생한다.
이 경우에는 재설치 외에는 답이 없으니 테스트용으로만 사용하는것이 좋다
# database.py
# -*- coding: utf-8 -*-
import pymysql
class Database():
def __init__(self):
self.db = pymysql.connect(host="127.0.0.1", user="root", password="123456", db="mysql", charset="utf8", port=3306)
self.cursor = self.db.cursor(pymysql.cursors.DictCursor)
def execute(self, query):
self.cursor.execute(query)
def execute_one(self, query):
self.cursor.execute(query)
row = self.cursor.fetchone()
return row
def execute_all(self, query):
self.cursor.execute(query)
row = self.cursor.fetchall()
return row
def commit(self):
self.db.commit()
__init__.py 내용을 작성해준다.
최초로 작성후에 여러가지 테스트를 할 때는 try~except 설치를 하지 않고 오류 메세지를 하나씩 확인하면서 한다
except에 걸려버리면 오류 메세지를 명확하게 확인할 수 없다
# __init__.py
# -*- coding: utf-8 -*-
from flask import Flask, jsonify, request
from test import database
app = Flask(__name__)
@app.route("/hi", methods=["GET"])
def hi():
return "hi"
#insert
@app.route("/insert", methods=['POST'])
def insert_table():
values = request.get_json()
data = values['data']
db_class = database.Database()
sql = "INSERT INTO test_table(test) VALUES('%s')" % (data)
db_class.execute(sql)
db_class.commit()
return jsonify(values), 200
#select all
@app.route("/select_all", methods=['GET'])
def select_all():
db_class = database.Database()
sql = "SELECT idx, test FROM test_table"
row = db_class.execute_all(sql)
row = "" if not row else row
return jsonify(row), 200
#select one
def select_one(idx):
db_class = database.Database()
select_sql = "SELECT idx, test FROM test_table WHERE idx=('%s')" % (idx)
row = db_class.execute_one(select_sql)
row = "" if not row else row
return row
#update
@app.route("/update", methods=['POST'])
def update_one():
'''
form에서 속성값을 받아올때
request.form.get("value)
form에서 속성값을 받은 후에 바로 dict로 변환할때
request.form.to_dict()
json으로 속성값을 바로 받아올때
request.get_json()
'''
values = request.get_json()
db_class = database.Database()
data = values['data']
idx = values['idx']
update_sql = "UPDATE test_table SET test=('%s') WHERE idx=('%r')" % (data, idx)
db_class.execute(update_sql)
db_class.commit()
# 방금 update한 row를 select 해온다.
# select 는 여러번 재사용 할 수 있기 때문에 메서드를 분리
row = select_one(idx)
return jsonify(row), 200
#delete
@app.route("/delete_one", methods=['POST'])
def delete_one():
values = request.get_json()
db_class = database.Database()
idx = values['idx']
# data가 존재하는지 확인
row = select_one(idx)
# 없으면 pass
if not row:
pass
# 있다면 삭제를 수행한다
else:
delete_sql = "DELETE FROM test_table where idx=('%r')" % (idx)
db_class.execute(delete_sql)
db_class.commit()
return jsonify(""), 200
여기까지 작성했으면 postman으로 간단하게 테스트를 해본다
insert
methods가 POST 였으므로 POST로 지정,
data는 JSON으로 준다
select_all
GET이므로 데이터 없이 주소만 날려보낸다
update
methods가 POST였으므로 데이터도 같이 날려준다,
where 절을 idx로 체크하기 때문에 idx도 같이 준다
delete
POST로 idx만 날려준다
웹 작업하는걸 싫어해서 ㅠ.. 여기까지..
'Python-Framework > Python-Framework__Flask' 카테고리의 다른 글
Flask api query string (0) | 2019.09.25 |
---|---|
flask restful crud (0) | 2019.07.25 |
flask_restful (0) | 2019.07.24 |
flask에서 html 페이지 띄우기 (0) | 2019.03.20 |
flask centos 에서 실행하기 (0) | 2019.03.20 |