[개발] 파이썬

8.1. Flask

브랜든정 2024. 12. 30. 10:40
반응형

파이썬 Flask 기본 구조와 라우팅, 템플릿 활용하기

파이썬 Flask는 웹 애플리케이션을 개발하기 위한 경량 프레임워크로, Python의 강력한 데이터 처리 기능과 풍부한 웹 UI를 결합하여 개발자가 효율적으로 웹 애플리케이션을 구축할 수 있도록 설계되었습니다. 이 문서에서는 파이썬 Flask의 기본 구조, 라우팅, 템플릿 활용 방법에 대해 자세히 설명합니다.

1. 파이썬 Flask 기본 구조

Flask 애플리케이션의 기본 구조는 다음과 같습니다:

  • static: 웹 UI를 지원하는 모든 정적 파일(예: JavaScript, CSS, 이미지)을 포함합니다.
  • templates: 애플리케이션의 HTML 페이지를 모두 포함합니다.
  • userData: 업로드된 사용자 데이터를 저장합니다.
  • application.py: Flask 애플리케이션 파일입니다.
  • comprehend_helper.py: Amazon Comprehend에 API 호출을 수행하는 함수입니다.
  • config.py: 애플리케이션 구성 파일입니다.
  • requirements.txt: 애플리케이션에 필요한 Python 종속성을 지정합니다.

2. 라우팅

라우팅은 Flask 애플리케이션에서 URL을 처리하는 방법입니다. Flask는 URL을 처리하는 데 사용되는 경로를 정의하는 데 사용됩니다. 예를 들어, / 경로는 애플리케이션의 루트이며, /saveFile 경로는 사용자가 파일을 업로드한 후 호출되는 경로입니다.

from flask import Flask, request, redirect, url_for

app = Flask(__name__)

@app.route('/')
def index():
    return 'Welcome to the Flask App'

@app.route('/saveFile', methods=['POST'])
def save_file():
    file = request.files['file']
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
    return redirect(url_for('dashboard'))

@app.route('/dashboard')
def dashboard():
    return 'Dashboard Page'

3. 템플릿

템플릿은 HTML 페이지를 포함하는 디렉토리입니다. Flask는 Jinja2 템플릿 엔진을 사용하여 HTML 페이지를 렌더링합니다. 예를 들어, upload.html 페이지는 사용자가 파일을 업로드하는 HTML 양식을 포함합니다.

<!-- templates/upload.html -->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>File Upload</title>
</head>
<body>
    <form action="/saveFile" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="Upload">
    </form>
</body>
</html>

4. 라우팅과 템플릿의 통합

라우팅과 템플릿을 통합하여 사용자가 파일을 업로드하고 결과를 시각화하는 웹 애플리케이션을 구축하는 방법을 보여드리겠습니다.

  1. templates 디렉토리에 upload.html 파일을 생성합니다.
  2. application.py 파일에서 / 경로를 정의하여 upload.html 페이지로 리다이렉션합니다.
  3. /saveFile 경로를 정의하여 사용자가 업로드한 파일을 저장하고 dashboard 페이지로 리다이렉션합니다.
  4. dashboard.html 파일을 생성하여 데이터를 읽고 시각화를 빌드합니다.
from flask import Flask, request, redirect, url_for, render_template
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

app.config['UPLOAD_FOLDER'] = 'userData'

@app.route('/')
def index():
    return render_template('upload.html')

@app.route('/saveFile', methods=['POST'])
def save_file():
    file = request.files['file']
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
    return redirect(url_for('dashboard'))

@app.route('/dashboard')
def dashboard():
    data = get_data_from_file()  # 데이터를 읽는 함수를 호출합니다.
    return render_template('dashboard.html', data=data)

def get_data_from_file():
    # 데이터를 읽는 로직을 구현합니다.
    pass

5. 데이터 시각화

데이터를 시각화하는 방법은 여러 가지가 있습니다. 예를 들어, Flask와 JavaScript를 사용하여 시각화를 빌드할 수 있습니다. static/js/core.js 파일에서 JavaScript 코드를 실행하여 데이터를 시각화합니다.

// static/js/core.js

// 데이터를 읽은 후 시각화를 빌드합니다.
const data = {{ data | tojson }};
const chart = new Chart(document.getElementById('chart'), {
    type: 'bar',
    data: {
        labels: data.labels,
        datasets: [{
            label: '데이터',
            data: data.data,
            backgroundColor: 'rgba(255, 99, 132, 0.2)',
            borderColor: 'rgba(255, 99, 132, 1)',
            borderWidth: 1
        }]
    },
    options: {
        scales: {
            y: {
                beginAtZero: true
            }
        }
    }
});

6. 구성 처리

Flask 서버는 일련의 구성 변수를 사용하여 서버 실행 방법을 제어합니다. 이러한 변수에는 디버그 출력, 세션 토큰 또는 기타 애플리케이션 설정이 포함될 수 있습니다. config.py 파일에서 구성 변수를 정의하고 application.py 내에서 상속합니다.

# config.py

DEBUG = True
UPLOAD_FOLDER = 'userData'
# application.py

from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

app.config.from_pyfile('config.py')

if __name__ == '__main__':
    app.run(debug=app.config['DEBUG'])

결론

파이썬 Flask는 웹 애플리케이션을 개발하기 위한 경량 프레임워크로, 라우팅과 템플릿을 통해 효율적으로 웹 애플리케이션을 구축할 수 있습니다. 이 문서에서는 Flask의 기본 구조, 라우팅, 템플릿 활용 방법을 자세히 설명하였습니다. 이를 통해 개발자가 Flask를 사용하여 다양한 웹 애플리케이션을 구축할 수 있도록 도와줍니다.

반응형

'[개발] 파이썬' 카테고리의 다른 글

8.2.2. Django 모델과 데이터베이스  (0) 2024.12.30
8.2.1. Django 기본 설정  (0) 2024.12.30
7.3. Matplotlib  (2) 2024.12.30
7.2. Pandas  (0) 2024.12.30
7.1. NumPy  (0) 2024.12.30