Flask (웹 프레임워크)

임정민·2024년 6월 20일
1

MLOps 공부

목록 보기
2/7
post-thumbnail

활용 프로젝트

  • '우리가족섬' 메타버스 아카데미 2기 최종 프로젝트

활용안

  • Unity 엔진(client)과 RESTful 통신 협업
  • Multi-Modal LLM 'LLaVa' (13B), Face Recognition 모델 서빙
  • MySQL, S3 연동 가족 앨범 구현
  • 가족 사진 로드, 사진 등록, 코멘트 수정, 사진 삭제 (CRUD)

Flask 주요 기능

1. 라우팅(Routing)

라우팅은 URL과 이를 처리하는 함수를 연결하는 기능입니다.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return "Welcome to the Home Page!"

@app.route('/about')
def about():
    return "This is the About Page!"

if __name__ == '__main__':
    app.run(debug=True)

2. 템플릿 렌더링(Template Rendering)

템플릿 렌더링을 통해 HTML 파일을 동적으로 생성할 수 있습니다.

from flask import Flask, render_template

app = Flask(__name__)

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

if __name__ == '__main__':
    app.run(debug=True)
# home.html
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Home</title>
</head>
<body>
    <h1>Welcome to the Home Page!</h1>
</body>
</html>

3. 요청(Request) 처리

요청 데이터를 처리하는 방법입니다.

from flask import Flask, request

app = Flask(__name__)

@app.route('/submit', methods=['POST'])
def submit():
    username = request.form['username']
    return f"Hello, {username}!"

if __name__ == '__main__':
    app.run(debug=True)
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Submit</title>
</head>
<body>
    <form action="/submit" method="post">
        <input type="text" name="username">
        <input type="submit">
    </form>
</body>
</html>

4. 응답(Response) 처리

응답 객체를 사용하여 응답을 세밀하게 제어할 수 있습니다.

from flask import Flask, Response

app = Flask(__name__)

@app.route('/custom_response')
def custom_response():
    custom_response = Response("Custom Response", status=202, mimetype='application/json')
    return custom_response

if __name__ == '__main__':
    app.run(debug=True)

5. 세션 관리(Session Management)

세션을 사용하여 클라이언트별 데이터를 저장할 수 있습니다.

from flask import Flask, session, render_template, request, make_response
from datetime import timedelta

app = Flask(__name__)
app.secret_key = "My_Secret_Key"
# 임의의 키를 설정한 것이다. 다음과 같이도 설정할 수 있다.
# app.secret_key = "asdlg964+dfy#*d^%45dskfna"

# 세션 유지 시간 설정 (예: 30분)
app.permanent_session_lifetime = timedelta(minutes=30)

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

@app.route("/setcookie", methods=["POST", "GET"])
def setcookie():
    if request.method == 'POST':
        receive_user_id = request.form['user_id']
        session.permanent = True  # 세션을 영구적으로 설정
        session['user_id'] = receive_user_id
        print(receive_user_id)
        print(session['user_id'])

    resp = make_response(render_template('read_cookie.html'))
    resp.set_cookie('user_id', receive_user_id)
    return resp

@app.route("/getcookie")
def getcookie():
    user_id = request.cookies.get('user_id')
    print(user_id)
    # print(session['user_id'])
    return f'<h1>welcome {user_id}</h1>'

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000, debug=True)

6. 에러 핸들링(Error Handling)

커스텀 에러 페이지를 설정할 수 있습니다.

from flask import Flask, render_template

app = Flask(__name__)

@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'), 404

if __name__ == '__main__':
    app.run(debug=True)
# 404.html
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Page Not Found</title>
</head>
<body>
    <h1>404 - Page Not Found</h1>
</body>
</html>

7. 확장(Extensions)

Flask의 기능을 확장할 수 있는 다양한 확장 기능이 있습니다. 예를 들어, Flask-SQLAlchemy를 사용하여 데이터베이스를 관리할 수 있습니다.

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

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

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)

    def __repr__(self):
        return f'<User {self.username}>'

@app.route('/add_user/<username>')
def add_user(username):
    new_user = User(username=username)
    db.session.add(new_user)
    db.session.commit()
    return f"User {username} added!"

if __name__ == '__main__':
    db.create_all()
    app.run(debug=True)

8. 리다이렉션(Redirection)

리다이렉션은 클라이언트를 다른 URL로 이동시키는 기능입니다.

from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route('/')
def home():
    return "Welcome to the Home Page!"

@app.route('/redirect_to_home')
def redirect_to_home():
    return redirect(url_for('home'))

if __name__ == '__main__':
    app.run(debug=True)

9. URL 빌딩(URL Building)

URL 빌딩은 URL을 동적으로 생성할 수 있는 기능입니다.

from flask import Flask, url_for

app = Flask(__name__)

@app.route('/')
def home():
    return "Welcome to the Home Page!"

@app.route('/user/<username>')
def show_user_profile(username):
    return f'User: {username}'

@app.route('/generate_url')
def generate_url():
    url = url_for('show_user_profile', username='JohnDoe')
    return f'Generated URL: {url}'

if __name__ == '__main__':
    app.run(debug=True)
profile
https://github.com/min731

0개의 댓글

관련 채용 정보