728x90
CRUD 애플리케이션(CRUD Application)은 Create, Read, Update, Delete의 기본적인 데이터 조작 기능을 제공하는 애플리케이션을 말한다. Python과 Flask 웹 프레임워크를 사용하여 간단한 CRUD 애플리케이션을 만드는 방법을 알아보자.
1. Flask 설치하기:
먼저, Flask를 설치해야 한다. 터미널 또는 명령 프롬프트에서 다음 명령을 실행하여 Flask를 설치한다.
pip install flask
프로젝트 구조 설정하기: 다음과 같은 폴더 구조로 프로젝트를 설정한다.
crud_app/
├── app.py
├── templates/
│ ├── index.html
│ └── edit.html
├── static/
│ └── style.css
└── data/
└── db.json
데이터 파일 생성: db.json 파일에 간단한 JSON 데이터베이스를 사용하여 데이터를 저장한다.
# db.json
{
"data": []
}
Flask 애플리케이션 작성:
app.py 파일에 아래와 같이 Flask 애플리케이션 코드를 작성한다.
# app.py
from flask import Flask, render_template, request, redirect, url_for, jsonify
import json
app = Flask(__name__)
# 데이터베이스 로드
def load_data():
with open('data/db.json', 'r') as f:
data = json.load(f)
return data
# 데이터 저장
def save_data(data):
with open('data/db.json', 'w') as f:
json.dump(data, f)
# 메인 페이지
@app.route('/')
def index():
data = load_data()
return render_template('index.html', items=data['data'])
# 아이템 추가
@app.route('/add', methods=['POST'])
def add_item():
data = load_data()
item = {
'id': len(data['data']) + 1,
'name': request.form['name'],
'description': request.form['description']
}
data['data'].append(item)
save_data(data)
return redirect(url_for('index'))
# 아이템 수정
@app.route('/edit/<int:item_id>')
def edit_item(item_id):
data = load_data()
item = next((item for item in data['data'] if item['id'] == item_id), None)
if item:
return render_template('edit.html', item=item)
else:
return 'Item not found', 404
@app.route('/update/<int:item_id>', methods=['POST'])
def update_item(item_id):
data = load_data()
item = next((item for item in data['data'] if item['id'] == item_id), None)
if item:
item['name'] = request.form['name']
item['description'] = request.form['description']
save_data(data)
return redirect(url_for('index'))
else:
return 'Item not found', 404
# 아이템 삭제
@app.route('/delete/<int:item_id>')
def delete_item(item_id):
data = load_data()
data['data'] = [item for item in data['data'] if item['id'] != item_id]
save_data(data)
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True)
HTML 템플릿 작성:
templates 폴더에 index.html과 edit.html 파일을 생성한다.
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<title>CRUD Application</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
<h1>CRUD Application</h1>
<h2>Add Item</h2>
<form action="/add" method="post">
<label for="name">Name:</label>
<input type="text" id="name" name="name" required>
<label for="description">Description:</label>
<input type="text" id="description" name="description" required>
<input type="submit" value="Add">
</form>
<h2>Items</h2>
<ul>
{% for item in items %}
<li>
{{ item.name }} - {{ item.description }}
<a href="{{ url_for('edit_item', item_id=item.id) }}">Edit</a>
<a href="{{ url_for('delete_item', item_id=item.id) }}">Delete</a>
</li>
{% endfor %}
</ul>
</body>
</html>
<!-- edit.html -->
<!DOCTYPE html>
<html>
<head>
<title>Edit Item</title>
</head>
<body>
<h1>Edit Item</h1>
<form action="/update/{{ item.id }}" method="post">
<label for="name">Name:</label>
<input type="text" id="name" name="name" value="{{ item.name }}" required>
<label for="description">Description:</label>
<input type="text" id="description" name="description" value="{{ item.description }}" required>
<input type="submit" value="Update">
</form>
</body>
</html>
실행:
터미널에서 python app.py를 실행하여 애플리케이션을 시작한다. 이제 브라우저에서 http://127.0.0.1:5000/을 열면 CRUD 애플리케이션이 동작하는 것을 확인할 수 있다. 이 애플리케이션은 아이템을 추가, 수정, 삭제하고 저장된 아이템 목록을 조회할 수 있는 기능을 제공한다.
다음과 같은 경우에 CRUD가 적용될 수 있다:
- 블로그 애플리케이션: 새로운 글을 작성하고 저장하며, 글 목록을 조회하거나 특정 글을 수정 및 삭제하는 기능을 제공한다.
- 일정 관리 애플리케이션: 새로운 일정을 추가하고, 일정 목록을 조회하거나 특정 일정을 수정 및 삭제하는 기능을 제공한다.
- 사용자 관리 애플리케이션: 새로운 사용자를 등록하고, 사용자 목록을 조회하거나 특정 사용자 정보를 수정 및 삭제하는 기능을 제공한다.
- 소셜 미디어 애플리케이션: 새로운 게시물을 작성하고, 친구 목록을 조회하거나 특정 게시물을 수정 및 삭제하는 기능을 제공한다.
CRUD는 데이터 조작 기능이 필요한 거의 모든 애플리케이션에서 사용될 수 있으며, 데이터를 생성, 읽기, 수정, 삭제하는 기본적인 작업들을 통해 데이터베이스와 상호작용하는 데 사용된다.
728x90
'MS AI School' 카테고리의 다른 글
DAY 40 - 데이터 처리 방법: 정규화, 표준화 (0) | 2022.12.09 |
---|---|
DAY 39 - 데이터 처리 개요 (0) | 2022.12.09 |
DAY 34 - CNN, 이미지의 증식(오버피팅 줄이는 방법) (0) | 2022.12.07 |
DAY 33 - 회귀 실습(보스턴 집값 예측) (0) | 2022.12.07 |
DAY 32 - 다중 분류 실습(로이터 기사) (0) | 2022.12.06 |