데이터 분석가

노트북 하기 좋은 카페 찾기 프로젝트(Udemy Final Project 6) 본문

유데미 부트캠프 프로젝트(Final)

노트북 하기 좋은 카페 찾기 프로젝트(Udemy Final Project 6)

PlintAn 2023. 6. 27. 17:00

안녕하세요 !

 

좋은 커피와 빠른 WIFI를 제공하는 카페를 찾고 있지 않으신가요 ??

 

 

이번 시간에는 노트북을 하기 좋은 환경 좋은 커피를 제공하는 카페 정보를 얻는

 

API 웹 사이트를 구축해보겠습니다 !

 

단계

 

1. 데이터 저장

2. 웹 서버 구축

3. API Endpoints 생성

 

우선 파이썬의 Flask 웹 프레임워크를 이용해 API를 구축합니다.

 

pip install flask flask_sqlalchemy

필요한 패키지 설치

 

1. 데이터 저장

 

2. 웹 서버 구축

 

<!DOCTYPE html>
<html>
<head>
    <title>Cafes</title>
</head>
<body>
    <h1>Cafes</h1>
    <!-- 카페 추가 폼 -->
    <form action="/add_cafe" method="POST">
        <label for="name">Name:</label>
        <input type="text" id="name" name="name" required><br><br>

        <label for="wifi">Wi-Fi:</label>
        <select id="wifi" name="wifi" required>
            <option value="1">Available</option>
            <option value="0">Not Available</option>
        </select><br><br>

        <label for="location">Location:</label>
        <input type="text" id="location" name="location" required><br><br>

        <label for="available_seat">Available Seat:</label>
        <input type="number" id="available_seat" name="available_seat" required><br><br>

        <label for="coffee_price">Coffee Price:</label>
        <input type="number" id="coffee_price" name="coffee_price" required><br><br>

        <input type="submit" value="Add Cafe">
    </form>
    
    <h2>Cafe List</h2>
    <ul>
        {% for cafe in cafes %}
        <li>
            <strong>{{ cafe['name'] }}</strong><br>
            Wi-Fi: {% if cafe['wifi'] == 1 %}Available{% else %}Not Available{% endif %}<br>
            Location: {{ cafe['location'] }}<br>
            Available Seat: {{ cafe['available_seat'] }}<br>
            Coffee Price: {{ cafe['coffee_price'] }}<br>
            <!-- 카페 삭제 폼 -->
            <form action="/delete_cafe/{{ cafe['id'] }}" method="POST">
                <input type="submit" value="Delete">
            </form>
        </li>
        {% endfor %}
    </ul>
</body>
</html>

 

3. API 웹 페이지 구축

import os
from flask import Flask, render_template, request, jsonify
import sqlite3

app = Flask(__name__)
DATABASE = 'cafes.db'

def get_db_connection():
    conn = sqlite3.connect(DATABASE)
    conn.row_factory = sqlite3.Row
    return conn

def create_table():
    conn = get_db_connection()
    conn.execute('''
        CREATE TABLE IF NOT EXISTS cafes (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL,
            wifi INTEGER NOT NULL,
            location TEXT NOT NULL,
            available_seat INTEGER NOT NULL,
            coffee_price INTEGER NOT NULL
        );
    ''')
    conn.commit()
    conn.close()

def get_cafes():
    conn = get_db_connection()
    cafes = conn.execute('SELECT * FROM cafes').fetchall()
    conn.close()
    return cafes

@app.route('/')
def index():
    # 모든 카페 데이터 가져오기
    cafes = get_cafes()
    return render_template('index.html', cafes=cafes)

@app.route('/add_cafe', methods=['POST'])
def add_cafe():
    # 폼 데이터에서 카페 정보 추출
    name = request.form['name']
    wifi = int(request.form['wifi'])
    location = request.form['location']
    available_seat = int(request.form['available_seat'])
    coffee_price = int(request.form['coffee_price'])

    conn = get_db_connection()
    # 카페 정보를 데이터베이스에 삽입
    conn.execute('INSERT INTO cafes (name, wifi, location, available_seat, coffee_price) VALUES (?, ?, ?, ?, ?)', (name, wifi, location, available_seat, coffee_price))
    conn.commit()
    conn.close()

    return jsonify({'message': 'Cafe added successfully'})

@app.route('/delete_cafe/<int:cafe_id>', methods=['POST'])
def delete_cafe(cafe_id):
    conn = get_db_connection()
    # 주어진 ID의 카페를 데이터베이스에서 삭제
    conn.execute('DELETE FROM cafes WHERE id = ?', (cafe_id,))
    conn.commit()
    conn.close()

    return jsonify({'message': 'Cafe deleted successfully'})

if __name__ == '__main__':
    # 데이터베이스 파일 삭제
    if os.path.exists(DATABASE):
        os.remove(DATABASE)
        
    # 데이터베이스 테이블 생성
    create_table()
    app.run(debug=True)

API 웹 사이트를 구축하였습니다

 

그러면 실행을 시켜보도록 할게요

 

 

 

커피, 와이파이 잘되는 카페 찾기

스타벅스 투썸플레이스가 리스트에서 보이네요 !

 

Wi-Fi 여부와, 위치, 이용 가능한 좌석 수, 커피 가격을 추가하고 확인할 수 있습니다 !

 

나중에 시간이 조금 더 된다면 조금 더 퀄리티가 좋은 카페 공유 플랫폼을 만들어 보고 싶네요 !

 

 

 

 

Comments