☞ 운영 체제 : Linux Ubuntu 20.04.5 LTS - focal
☞ CPU : AMD Ryzen 7 5800H with Radeon Graphics (16 CPUs), ~3.2GHz
☞ 그래픽카드 : NVIDIA GeForce RTX3070 Laptop GPU
☞ IDE : Visual Studio Code
☞ Flask : Python 3.8, Flask 2.2.2, Flask-RESTful 0.3.9, Flask-SQLAlchemy 3.0.3
☞ DB : MariaDB 10.6.12
목차
① DB 테이블 생성
※ 테이블 생성
MariaDB에 접속하여 테이블을 생성할 수도 있지만, 지난 포스팅에서 설치했던 phpMyAdmin에 접속하여 생성하면 UI를 통해 접근할 수 있다. 접속은 아래의 주소를 웹에 입력하면 된다.
http://localhost/phpmyadmin/index.php
- 사용자명: root
- 암호: (MariaDB에서 설정했던 암호)
접속하고나면 왼쪽에 DB 목록을 확인할 수 있다. 미리 만들어놓은 refutsal_v1에는 users라는 테이블이 있는데 New를 클릭하면 새 테이블을 만들 수 있다.
테이블 이름은 'user'로 하고 항목을 하나 늘려준다.
이름 | 종류 | 기본값 |
id | INT | 1 |
name | TEXT | |
TEXT | ||
password | TEXT | |
profile | TEXT |
데이터 정렬방식은 'utf8mb4_unicode_ci'로 지정한다.
☞ MariaDB에서 만든 테이블 확인하기
만든 테이블을 MariaDB에서도 확인하고 싶은 경우 접속해서 해당 DB의 테이블을 확인하면 된다.
# 터미널 입력
mysql -u root -p
# 비밀번호 입력
# use [DB이름]
use refutsal_v1;
show tables;
② API 만들기
코드를 작성하기 전에 설치해야하는 것이 있다.
# 터미널에서 설치
pip3 install mysql-connector-python httpie
mysql-connector-python 모듈은 이름 그대로 MySQL 서버와 Python 간의 인터페이스 역할을 한다. 사용자가 SQL 문을 실행하거나 데이터 검색을 할 수 있도록 하는 모듈이다. 인터페이스 마다 config 파일에 DB URL 프로토콜 자리(?)에 들어가는 내용이 다르다.
httpie는 SQL 문과 함께 HTTP 요청을 통해 API와 상호작용을 할 수 있도록 인터페이스 역할을 한다. 테이블 자원을 입력하여 POST하는데 사용해볼 것이다.
※ 트리
test5이란 디렉터리 안의 구조를 보여준다. __pycache__를 무시하고 작성할 파일은 다음과 같다.
- __init__.py
- config.py
- models.py
- api/app.py
※ 코드 작성
☞ __init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_pyfile('config.py')
db = SQLAlchemy(app)
☞ config.py
db = {
'user' : 'root',
'password' : '1234',
'host' : '127.0.0.1',
'port' : '3306',
'database' : 'refutsal_v1'
}
DEBUG = True
SQLALCHEMY_DATABASE_URI = f"mysql+mysqlconnector://{db['user']}:{db['password']}@{db['host']}:{db['port']}/{db['database']}?charset=utf8"
SQLALCHEMY_TRACK_MODIFICATIONS = False
☞ models.py
from . import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
email = db.Column(db.String(100), unique=True, nullable=False)
password = db.Column(db.String(100), nullable=False)
profile = db.Column(db.String(100), nullable=False)
def __repr__(self):
return '<User %r>' % self.name
def to_dict(self):
return {
'id': self.id,
'name': self.name,
'email': self.email,
'profile': self.profile
}
☞ api/app.py
from flask import request
from flask_restful import Resource, Api
from .. import app, db
from ..models import User
api = Api(app)
class UserResource(Resource):
def get(self, user_id=None):
if user_id:
user = User.query.get(user_id)
if user:
return user.to_dict()
else:
return {'error': 'User not found'}, 404
else:
users = User.query.all()
return [user.to_dict() for user in users]
def post(self):
data = request.get_json()
user = User(name=data['name'], email=data['email'], password=data['password'], profile=data['profile'])
db.session.add(user)
db.session.commit()
return {'message': 'User created successfully'}
api.add_resource(UserResource, '/users', '/users/<int:user_id>')
※ 실행
# 터미널 입력
export FLASK_APP=api.app
echo ${FLASK_APP}
# Flask 실행
flask run
☞ 127.0.0.1:5000 & /users/
Flask 서버를 열고 아무것도 하지 않으면 /users에는 아무것도 나오지 않는다.
☞ httpie POST
# 터미널 입력
http POST 127.0.0.1:5000/users name=yasun95 email=ysj6813@naver.com password=yaho profile='Lying Down Developer'
'IT > FLASK' 카테고리의 다른 글
[FLASK] 4. 웹 페이지에 동영상 띄우기(+ YOLOv5) (1) | 2023.02.24 |
---|---|
[FLASK] 2. DB 생성하기 (0) | 2023.02.09 |
[FLASK] 1. Flask 설치와 실행 (0) | 2023.02.06 |