Web/Flask

Flask 블루프린트(Blueprint)로 라우트 함수 관리하기

daeunnniii 2022. 1. 7. 17:09
728x90
반응형

라우트 함수란?

flask에서는 @app.route('/')와 같이 애너테이션을 통해 url을 매핑한다. 이때 @app.route와 같은 애너테이션으로 매핑되는 함수를 라우트 함수라고 한다.

 

블루프린트(Blueprint)란?

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

라우트함수들은 기능이 필요할 때마다 계속 추가되어야하기 때문에 create_app 함수내에 함수가 많을 경우 번거로워질 수 있다. 이때 블루프린트(Blueprint)라는 클래스를 사용하면 라우트 함수들을 보다 더 구조적으로 관리할 수 있다.

Blueprint 사용하기

C:\프로젝트 경로\views\main_views.py에서 임의로 간단한 코드를 작성한다.

@app.route 대신 @bp.route로 변경하여 작성하였다. @bp.route에서 bp는 Blueprint 클래스로 생성한 객체를 의미한다.

from flask import Blueprint

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


@bp.route('/')
def home():
    return 'Hello, This is Home!'

Blueprint 클래스로 객체를 생성할 때는 'main'(이름), __name__(모듈명), url-prefix='/'(URL 프리픽스) 값을 전달해야 한다. 여기서 'main'은 나중에 함수명으로 url을 찾아주는 url_for 함수에서 사용된다.

url-prefix는 특정 파일(main_views.py)에 있는 함수의 애너테이션 URL 앞에 기본으로 붙일 접두어 URL을 의미한다.

ex) url-prefix='/dabi'라고 입력했다면 home() 함수를 호출하는 URL은 localhost:5000 이 아닌 localhost:5000/dabi가 된다.

 

 

 

 

플라스크 앱 생성 시 Blueprint 적용하기

위에서 생성한 Blueprint 파일을 적용하기 위해 __init__.py 파일을 다음과 같이 작성한다.

아래와 같이 Blueprint를 사용하려면 main_views.py 파일에서 생성한 Blueprint 객체인 bp를 등록하면 된다.

from flask import Flask
from views import main_views

app = Flask(__name__)
app.register_blueprint(main_views.bp)

if __name__ == '__main__':
    app.run('0.0.0.0', port=5000, debug=True)

 

라우트 함수 등록하기

Blueprint가 잘 동작하는지 확인하기 위해 라우트 함수를 추가하고, url 매핑을 /hello로 입력하고, index() 함수를 추가한다.

from flask import Blueprint

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


@bp.route('/')
def home():
    return 'Hello, This is Home!'

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

 

__init__.py 실행

__init__.py를 실행하고 Blueprint를 이용해 등록한 라우트 함수의 url 매핑들이 잘 동작하는지 확인한다.

localhost:5000 과 localhost:5000/hello에 접속하면 다음과 같이 Hello, This is Home!과 이후에 추가한 hello index가 잘 뜨는 것을 확인할 수 있다.

 

 

 

 

참고: https://wikidocs.net/81510

728x90
반응형