Flask - CRUD Blog Tutorial
Flask 공식 Tutorial을 통해 ‘Flaskr’ 이란 이름의 기본적인 blog application을 만들었습니다. 해당 코딩 과정에서 기억해 두고 싶은 기법들을 개인 용도로 정리하였습니다.
Blueprint
Blueprint는 공통으로 사용하는 ‘view’들을 카테고리 별로 그룹화하여 관리하는 기법이라고 볼 수 있다.
# flaskr/auth.py
from flask import Blueprint
bp = Blueprint('auth', __name__, url_prefix='/auth')
# flaskr/__init__.py
def create_app():
app = ...
# existing code omitted
from . import auth
app.register_blueprint(auth.bp)
return app
handling DB
‘Flask’에서는 기본적으로 python 내장 DB인 sqlite3를 사용할 수 있다. DB 다루기가 익숙치 않아 명령어들을 몇 개 메모해두었다.
db의 ‘user’ Table로 부터 찾고자 하는 username의 row를 한 개(fetchone()) 가져오기. 아래돠 같이 ‘?’를 사용하여 변수를 넣어 줄 수 있다.
username = 'dada'
user _id= db.execute(
'SELECT id FROM user WHERE username = ?', (username,)
).fetchone()
if user_id is not None:
...
# omitted
JOIN 사용하기
post = get_db().execute(
'SELECT p.id, title, body, created, author_id, username'
' FROM post p JOIN user u ON p.author_id = u.id'
' WHERE p.id = ?'
(id,)
).fetchone()
redirect, url_for
flask에서 간편하게 url_for()를 사용하여 ‘이름’으로 url을 리턴하는데, ‘auth.py’에 있는 login view는 아래처럼 표현한다.
if request.method == 'POST':
...
return redirect(url_for('auth.login'))
login required
이 부분은 그냥 외워야 할 것 같다…
import functools
def login_required(view):
@functools.wraps(view)
def wrapped_view(**kwargs):
if g.user is None:
return redirect(url_for('auth.login'))
return view(**kwargs)
return wrapped_view
응용 ATM controller
과제 Custom Task 용도로 작성.
Requirement : Insert Card => PIN number => Select Account => See Balance/Deposit/Withdraw
Stack : Python, Flask