⭐️ 참고 😇
Flask는 application component를 만들거나, applicaion 안팎으로 공통적인 패턴을 지원하는 목적으로 블루프린트라는 컨셉을 사용한다.
블루프린트는 큰 application을 단순화시키는 역할을 하고, Flask extension(확장 프로그램, 라이브러리 등) 등록을 위한 중심 수단으로도 쓰인다.
플라스크는 django와 달리 url들을 파일 단위에서 따로 관리하지 않고, controller의 endpoint 함수에 데코레이터를 붙여서 관리한다.
라우트함수(@app.route로 매핑되는 함수)들은 기능이 필요할때마다 계속 추가되어야 하기 때문에, create_app 함수내에 함수가 많을 경우 번거로워질 수 있다.
이런 상황에서 블루프린트(Blueprint)를 이용하면 라우트 함수들을 보다 구조적으로 관리할 수 있게 된다. 블루프린트에 대해서 자세히 알아보도록 하자.
Blueprint는 이름, 모듈명, URL 프리픽스 값을 입력으로 객체를 생성한다. 여기서 사용된 'main' 이라는 이름은 나중에 함수명으로 URL을 찾아내는 url_for 함수에서 사용된다.
# directory [C:\projects\myproject\pybo\views\main_views.py]
from flask import Blueprint
bp = Blueprint('main', __name__, url_prefix='/')
@bp.route('/') # app.route가 아닌 블루프린트 클래스 객체 bg.route로 표시한다.
def hello_pybo():
return 'Hello, Pybo!'
URL 프리픽스(url_prefix)는 main_views.py 파일에 있는 함수들의 URL 앞에 항상 붙게 되는 프리픽스 URL을 의미한다. 만약 위에서 url_prefix='/' 대신 url_prefix='/main' 이라고 선언했다면 hello_pybo 함수를 호출하기 위해서는 http://localhost:5000/ 대신 http://localhost:5000/main/ 이라고 호출해야 한다.
생성한 블루 프린트 앱을 적용하기 위해서는 app에 블루프린트를 추가해주어야 한다. 점프투 파이썬 플라스크 깃헙에서 코드를 가져온건데 import를 저렇게 함수 내에서 해도 되나보다(처음 알음)
# directory [C:\projects\myproject\pybo\__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
설명의 디렉토리나 파일명이 조금 성의가 없긴 하지만... 🤨 결론적으로 다음 과정을 거쳐 블루프린트를 사용하면 될 것 같다.
app = Flask(__name__)
이 포함된)에서 app에 blueprint 객체를 register해준다.# directory [C:\projects\myproject\pybo\views\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'
알기 쉽게 알려주셔서 감사합니다!