Flask blueprint를 알아보자🤔

yeeun lee·2020년 5월 27일
0

flask

목록 보기
5/5

⭐️ 참고 😇

blueprint

Flask는 application component를 만들거나, applicaion 안팎으로 공통적인 패턴을 지원하는 목적으로 블루프린트라는 컨셉을 사용한다.

블루프린트는 큰 application을 단순화시키는 역할을 하고, Flask extension(확장 프로그램, 라이브러리 등) 등록을 위한 중심 수단으로도 쓰인다.


플라스크는 django와 달리 url들을 파일 단위에서 따로 관리하지 않고, controller의 endpoint 함수에 데코레이터를 붙여서 관리한다.

라우트함수(@app.route로 매핑되는 함수)들은 기능이 필요할때마다 계속 추가되어야 하기 때문에, create_app 함수내에 함수가 많을 경우 번거로워질 수 있다.

이런 상황에서 블루프린트(Blueprint)를 이용하면 라우트 함수들을 보다 구조적으로 관리할 수 있게 된다. 블루프린트에 대해서 자세히 알아보도록 하자.

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_prefix

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

설명의 디렉토리나 파일명이 조금 성의가 없긴 하지만... 🤨 결론적으로 다음 과정을 거쳐 블루프린트를 사용하면 될 것 같다.

  • blueprint 객체를 생성한다.
  • app을 정의하는 함수(app = Flask(__name__)이 포함된)에서 app에 blueprint 객체를 register해준다.
  • controller route에서 blueprint 객체를 써준다.
# 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'
profile
이사간 블로그: yenilee.github.io

2개의 댓글

comment-user-thumbnail
2020년 12월 2일

알기 쉽게 알려주셔서 감사합니다!

답글 달기
comment-user-thumbnail
2021년 7월 8일

오호 참고 하겠습니다 감사합니다

답글 달기