소개
이 랩에서는 Python 의 인기 있는 웹 프레임워크인 Flask 를 사용하여 블로그 애플리케이션을 만드는 과정을 안내합니다. 이 애플리케이션은 모든 블로그 게시물을 나열하고, 로그인한 사용자가 게시물을 생성할 수 있도록 하며, 작성자가 자신의 게시물을 편집하거나 삭제할 수 있도록 합니다.
참고: 코드 파일을 직접 생성하고 환경에서 실행해야 합니다. Web 5000 에서 Flask 서비스 상태를 미리 볼 수 있습니다.
이 랩에서는 Python 의 인기 있는 웹 프레임워크인 Flask 를 사용하여 블로그 애플리케이션을 만드는 과정을 안내합니다. 이 애플리케이션은 모든 블로그 게시물을 나열하고, 로그인한 사용자가 게시물을 생성할 수 있도록 하며, 작성자가 자신의 게시물을 편집하거나 삭제할 수 있도록 합니다.
참고: 코드 파일을 직접 생성하고 환경에서 실행해야 합니다. Web 5000 에서 Flask 서비스 상태를 미리 볼 수 있습니다.
먼저, 블로그를 위한 Blueprint 를 정의합니다. Blueprint 는 관련 뷰 (view) 및 기타 코드를 그룹화하여 구성하는 방법입니다.
## flaskr/blog.py
from flask import Blueprint, flash, g, redirect, render_template, request, url_for
from werkzeug.exceptions import abort
from flaskr.auth import login_required
from flaskr.db import get_db
## Blueprint 는 'blog'로 명명됩니다. 동일한 파일에서 정의됩니다.
## Blueprint 는 정의된 위치를 알아야 하므로 __name__이 두 번째 인수로 전달됩니다.
bp = Blueprint('blog', __name__)
다음으로, Blueprint 를 애플리케이션에 등록합니다.
## flaskr/__init__.py
def create_app():
app = ...
## 기존 코드 생략
## app.register_blueprint() 를 사용하여 팩토리에서 Blueprint 를 가져와 등록합니다.
from . import blog
app.register_blueprint(blog.bp)
app.add_url_rule('/', endpoint='index')
return app
이제 모든 블로그 게시물을 표시하는 인덱스 뷰를 생성해 보겠습니다. SQL JOIN을 사용하여 결과에 user 테이블의 작성자 정보를 포함시킵니다.
## flaskr/blog.py
@bp.route('/')
def index():
db = get_db()
posts = db.execute(
'SELECT p.id, title, body, created, author_id, username'
' FROM post p JOIN user u ON p.author_id = u.id'
' ORDER BY created DESC'
).fetchall()
return render_template('blog/index.html', posts=posts)
다음으로, 로그인한 사용자가 새 블로그 게시물을 생성할 수 있도록 하는 뷰를 생성합니다.
## flaskr/blog.py
@bp.route('/create', methods=('GET', 'POST'))
@login_required
def create():
if request.method == 'POST':
title = request.form['title']
body = request.form['body']
error = None
if not title:
error = 'Title is required.'
if error is not None:
flash(error)
else:
db = get_db()
db.execute(
'INSERT INTO post (title, body, author_id)'
' VALUES (?, ?, ?)',
(title, body, g.user['id'])
)
db.commit()
return redirect(url_for('blog.index'))
return render_template('blog/create.html')
이제 작성자가 자신의 게시물을 업데이트할 수 있는 기능을 추가합니다. 코드 중복을 피하기 위해, 게시물을 가져오고 현재 사용자가 작성자인지 확인하는 헬퍼 함수를 생성합니다.
## flaskr/blog.py
@bp.route('/<int:id>/update', methods=('GET', 'POST'))
@login_required
def update(id):
post = get_post(id)
if request.method == 'POST':
title = request.form['title']
body = request.form['body']
error = None
if not title:
error = 'Title is required.'
if error is not None:
flash(error)
else:
db = get_db()
db.execute(
'UPDATE post SET title = ?, body = ?'
' WHERE id = ?',
(title, body, id)
)
db.commit()
return redirect(url_for('blog.index'))
return render_template('blog/update.html', post=post)
마지막으로, 작성자가 자신의 게시물을 삭제할 수 있는 기능을 추가합니다.
## flaskr/blog.py
@bp.route('/<int:id>/delete', methods=('POST',))
@login_required
def delete(id):
get_post(id)
db = get_db()
db.execute('DELETE FROM post WHERE id = ?', (id,))
db.commit()
return redirect(url_for('blog.index'))
축하합니다! Flask 를 사용하여 간단한 블로그 애플리케이션을 만들었습니다! 이 애플리케이션은 사용자 인증을 지원하며, 사용자가 자신의 블로그 게시물을 생성, 편집 및 삭제할 수 있도록 합니다.