Hike News
Hike News

python flask로 빠르게 restful 만들기

Person:

  • Python flask의 restful 예제를 만드는 간단한 tutorial을 만들어주세요

ChatGPT:

  • 물론입니다! 아래는 Python Flask를 사용하여 간단한 RESTful API를 만드는 튜토리얼입니다. 이 예제에서는 “작업”을 나타내는 간단한 To-Do 목록을 관리하는 API를 구축하겠습니다.
  1. Flask 설치하기

먼저, Flask를 설치해야 합니다. 터미널 또는 명령 프롬프트에서 다음 명령을 실행하여 Flask를 설치하세요.

1
2

pip install Flask
  1. API 서버 구성하기

아래는 간단한 To-Do 목록을 관리하는 API를 설정하는 예제 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

from flask import Flask, request
from flask_restful import Api, Resource

app = Flask(__name__)
api = Api(app)

# 데이터베이스 대신에 간단한 리스트를 사용합니다.
todos = {}

class TodoResource(Resource):
def get(self, todo_id):
return {todo_id: todos.get(todo_id)}

def put(self, todo_id):
todos[todo_id] = request.form['data']
return {todo_id: todos[todo_id]}

def delete(self, todo_id):
if todo_id in todos:
del todos[todo_id]
return '', 204

api.add_resource(TodoResource, '/todos/<string:todo_id>')

if __name__ == '__main__':
app.run(debug=True)
  1. API 사용하기
  • To-Do 추가: curl -X PUT -d "data=Do something" http://localhost:5000/todos/1
  • To-Do 조회: curl http://localhost:5000/todos/1
  • To-Do 삭제: curl -X DELETE http://localhost:5000/todos/1

이제 위의 코드를 실행하면, 간단한 To-Do 목록을 추가, 조회 및 삭제할 수 있는 RESTful API가 작동하게 됩니다.

물론 이 예제는 매우 기본적인 것이며, 실제 프로덕션 환경에서는 데이터베이스 연결, 보안, 인증 등을 추가해야 할 수 있습니다. 그러나 이 예제는 Flask를 사용하여 간단한 RESTful API를 구축하는 기본 개념을 이해하는 데 도움이 될 것입니다.

Person:

  • 위의 예제로 sqlite와 연동하는 내용을 추가해주세요

ChatGPT:

  • 물론입니다. SQLite와 Flask를 연동하여 데이터베이스를 사용하는 방법을 보여드리겠습니다. 아래 예제에서는 To-Do 목록을 SQLite 데이터베이스에 저장하고 관리하는 방법을 보여줍니다.
  1. SQLite 설치 및 Flask-SQLAlchemy 추가하기

SQLite를 사용하기 위해 다음 명령을 실행하여 필요한 패키지를 설치합니다.

1
2

pip install Flask-SQLAlchemy
  1. API 서버 구성 및 SQLite 연동하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

from flask import Flask, request
from flask_restful import Api, Resource
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todos.db'
db = SQLAlchemy(app)
api = Api(app)

class TodoModel(db.Model):
id = db.Column(db.Integer, primary_key=True)
text = db.Column(db.String(200), nullable=False)

db.create_all()

class TodoResource(Resource):
def get(self, todo_id):
todo = TodoModel.query.filter_by(id=todo_id).first()
if todo:
return {'id': todo.id, 'text': todo.text}
else:
return {'message': 'Todo not found'}, 404

def put(self, todo_id):
data = request.form['data']
todo = TodoModel(id=todo_id, text=data)
db.session.add(todo)
db.session.commit()
return {'id': todo.id, 'text': todo.text}

def delete(self, todo_id):
todo = TodoModel.query.filter_by(id=todo_id).first()
if todo:
db.session.delete(todo)
db.session.commit()
return '', 204
else:
return {'message': 'Todo not found'}, 404

api.add_resource(TodoResource, '/todos/<int:todo_id>')

if __name__ == '__main__':
app.run(debug=True)
  1. API 사용하기
  • To-Do 추가: curl -X PUT -d "data=Do something" http://localhost:5000/todos/1
  • To-Do 조회: curl http://localhost:5000/todos/1
  • To-Do 삭제: curl -X DELETE http://localhost:5000/todos/1

위 코드에서는 SQLAlchemy를 사용하여 데이터베이스 모델을 정의하고, To-Do 항목을 SQLite 데이터베이스에 추가, 조회 및 삭제할 수 있도록 구성하였습니다. SQLite 데이터베이스 파일은 프로젝트 디렉토리에 todos.db라는 이름으로 생성됩니다.

이제 이 예제를 실행하면 SQLite 데이터베이스를 사용하는 Flask RESTful API가 작동하게 됩니다.

Person:

  • 위의 소스코드에서 sqlite:///todos.db는 자동으로 생성되는 것인가요?

ChatGPT:

  • 네, 맞습니다. SQLAlchemy에서 sqlite:///todos.db와 같은 연결 문자열을 사용하면 SQLite 데이터베이스가 자동으로 생성됩니다. 해당 연결 문자열은 sqlite:///로 시작하며, 그 뒤에 데이터베이스 파일의 경로와 이름을 지정합니다. 위의 코드에서 todos.db라는 이름의 SQLite 데이터베이스 파일이 프로젝트 디렉토리에 자동으로 생성되며, 데이터베이스 테이블도 해당 연결을 통해 자동으로 생성됩니다.

여기서 중요한 점은, 이렇게 생성된 SQLite 데이터베이스는 개발 및 테스트 목적으로 사용하기에 적합하지만, 실제 프로덕션 환경에서는 더 견고하고 확장 가능한 데이터베이스 시스템을 사용하는 것이 좋습니다. SQLite는 경량 데이터베이스로서 파일 단위로 동작하므로, 대규모 애플리케이션에는 적합하지 않을 수 있습니다.