활용 프로젝트
활용안
Flask 주요 기능
라우팅은 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)
템플릿 렌더링을 통해 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>
요청 데이터를 처리하는 방법입니다.
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>
응답 객체를 사용하여 응답을 세밀하게 제어할 수 있습니다.
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)
세션을 사용하여 클라이언트별 데이터를 저장할 수 있습니다.
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)
커스텀 에러 페이지를 설정할 수 있습니다.
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>
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)
리다이렉션은 클라이언트를 다른 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)
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)