Flask는 Python으로 작성된 가볍고 유연한 웹 프레임워크로, 단순한 웹 사이트에서부터 복잡한 웹 애플리케이션까지 손쉽게 구축할 수 있도록 해줍니다. Flask는 최소한의 코드로 웹 애플리케이션을 만들 수 있는 마이크로 프레임워크로, 다음과 같은 특징을 가집니다.
- 간결성: 복잡한 설정이나 대규모 구조 없이 간단한 코드로 서버를 시작할 수 있습니다.
- 확장성: 필요한 기능만 확장해서 사용할 수 있습니다.
- Jinja2 템플릿 엔진: HTML 템플릿을 쉽게 관리하고 데이터와의 연동을 편리하게 해주는 템플릿 엔진을 제공합니다.
Flask 설치
Flask는 Python 패키지 관리자인 pip를 통해 설치할 수 있습니다.
pip install Flask
기본 Flask 애플리케이션 작성
다음은 가장 간단한 Flask 애플리케이션 예제입니다.
from flask import Flask
app = Flask(__name__)
@app.route(“/”)
def hello():
return “Hello, World!”
if __name__ == “__main__”:
app.run(debug=True)
주요 설명
- Flask 객체 생성:
app = Flask(__name__)
는 Flask 애플리케이션 객체를 만듭니다. - 라우트 설정:
@app.route("/")
는 URL 경로를 지정하여 특정 경로로 들어온 요청에 대해 함수를 실행합니다. - 서버 실행:
app.run()
을 통해 Flask 서버를 실행합니다.
Flask 주요 기능
1. 라우팅
라우팅은 URL과 함수를 연결하는 것으로, 다양한 URL 경로에 따라 서로 다른 페이지나 데이터를 보여줄 수 있습니다.
@app.route(“/hello”)
def hello():
return “Hello, Flask!”
@app.route(“/user/<username>”)
def show_user_profile(username):
return f”User: {username}”
2. 템플릿 렌더링
Flask는 Jinja2 템플릿 엔진을 사용하여 HTML 템플릿에 동적으로 데이터를 전달할 수 있습니다.
템플릿 파일을 templates/
폴더에 작성합니다.
templates/index.html
예제:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Flask App</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
Flask에서 템플릿 렌더링:
from flask import render_template
@app.route(“/greet/<name>”)
def greet(name):
return render_template(“index.html”, name=name)
render_template()
함수는 templates/
폴더 내의 index.html
을 찾아 렌더링하며, name
변수를 템플릿으로 전달합니다.
3.요청 처리
Flask는 GET 및 POST 요청을 처리할 수 있습니다.
- from flask import request
@app.route(“/submit”, methods=[“GET”, “POST”])
def submit():
if request.method == “POST”:
name = request.form[“name”] return f”Hello, {name}!”
return ”’
<form method=”post”>
Name: <input type=”text” name=”name”>
<input type=”submit” value=”Submit”>
</form> request
객체를 통해 POST 데이터에 접근할 수 있으며, 사용자가 제출한 데이터를 서버에서 처리할 수 있습니다.
”’
4. 리다이렉트 및 URL 생성
redirect()
와 url_for()
함수를 사용하면 URL을 생성하고 리다이렉트할 수 있습니다.
from flask import redirect, url_for
@app.route(“/”)
def index():
return redirect(url_for(“hello”))
@app.route(“/hello”)
def hello():
return “Hello, Flask!”
url_for("hello")
는hello
함수가 매핑된 URL로 이동하게 합니다.
5. Flask와 데이터베이스 연동
Flask는 SQLAlchemy와 같은 ORM(Object Relational Mapping) 라이브러리를 지원하여 데이터베이스와 연동할 수 있습니다. 예를 들어, SQLite와 연동하는 간단한 코드 예시는 다음과 같습니다.
from flask_sqlalchemy import SQLAlchemy
app.config[“SQLALCHEMY_DATABASE_URI”] = “sqlite:///test.db”
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
@app.route(“/add_user/<name>”)
def add_user(name):
user = User(name=name)
db.session.add(user)
db.session.commit()
return f”Added user {name}.”
SQLAlchemy
를 사용하면 Python 객체와 데이터베이스 테이블을 매핑하여 데이터 관리를 쉽게 할 수 있습니다.
6. Flask 실행
일반적으로 다음 명령어로 Flask 애플리케이션을 실행합니다.
python app.py
또는 FLASK_APP
환경 변수를 설정하여 실행할 수도 있습니다.
export FLASK_APP=app.py
flask run
이 명령어로 애플리케이션을 실행한 뒤, http://127.0.0.1:5000
에서 접속하여 웹 애플리케이션을 테스트할 수 있습니다.