Flask 블루프린트로 라우트 함수 관리



create_app 에 @app.route(‘/’) 애너테이션과 같은 라우트 함수를 계속 추가하면 불편하므로 블루프린트라는 클래스를 사용한다.



블루프린트 사용하기


  1. 블루프린트 생성하기
cd pybo
mkdir views
touch main_views.py
# main_views.py

from flask import Blueprint

bp = Blueprint('main', __name__, url_prefix='/')


@bp.route('/')
def hello_pybo():
    return 'Hello, Pybo!'

이 코드는 pybo/__init__.py 파일에 있던 hello_pybo 함수를 main_views.py 파일에 그대로 옮긴 것이다. 단, 애너테이션이 @app.route에서 @bp.route로 변경되었다. Blueprint 클래스로 객체를 생성할 때는 이름, 모듈명, URL 프리픽스 값을 전달해야 한다.


  1. 플라스크 앱 생성 시 블루프린트 적용하기
# __init__.py

from flask import Flask


def create_app():
    app = Flask(__name__)

    from .views import main_views
    app.register_blueprint(main_views.bp)

    return app

create_app 함수에 등록되었던 hello_pybo 함수 대신 블루 프린트를 사용하도록 변경하였다.


  1. 라우트 함수 등록하기


# main_views.py

from flask import Blueprint

bp = Blueprint('main', __name__, url_prefix='/')


@bp.route('/hello')
def hello_pybo():
    return 'Hello, Pybo!'


@bp.route('/')
def index():
    return 'Pybo index'

URL 매핑을 변경하였다.