본문 바로가기

IT/FLASK

[FLASK] 3. 간단한 API 만들기

반응형

 

 

☞ 운영 체제 : 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

 


목차

 1. DB 테이블 생성

 2. API 만들기

 

 


 

 

 

 

① DB 테이블 생성

※ 테이블 생성

MariaDB에 접속하여 테이블을 생성할 수도 있지만, 지난 포스팅에서 설치했던 phpMyAdmin에 접속하여 생성하면 UI를 통해 접근할 수 있다. 접속은 아래의 주소를 웹에 입력하면 된다.

 

 

http://localhost/phpmyadmin/index.php

 

 

 

  • 사용자명: root
  • 암호: (MariaDB에서 설정했던 암호)

 

접속하고나면 왼쪽에 DB 목록을 확인할 수 있다. 미리 만들어놓은 refutsal_v1에는 users라는 테이블이 있는데 New를 클릭하면 새 테이블을 만들 수 있다.

 

 

 

테이블 이름은 'user'로 하고 항목을 하나 늘려준다.

 

 

이름 종류 기본값
id INT 1
name TEXT  
email 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)  (0) 2023.02.24
[FLASK] 2. DB 생성하기  (0) 2023.02.09
[FLASK] 1. Flask 설치와 실행  (0) 2023.02.06