[Flask] Flask 블루프린트로 라우트 함수 관리하기

참조


소개

  • 앞서 진행한 pybo/init.py 파일 내용을 보면 create_app 함수 안에 hello_pybo 함수가 들어 있습니다.
  • hello_pybo 함수는 URL에서 / 에 매핑되는 함수인데, 그 매핑을 @app.route('/') 라는 애너테이션이 만들어 줍니다.
  • 이때 @app.route 와 같은 애너테이션으로 매핑되는 함수를 라우트 함수 라고 합니다.
  • 하지만, 지금처럼 작성을 하게 되면 새로운 URL이 생길 때 라우트 함수를 create_app 함수 안에 계속 추가해야 하는 불편함이 있습니다.
  • 이때 사용할 수 있는 클래스가 블루프린트(Blueprint) 입니다.

블루프린트 생성하기

  • init.py 파일의 hello_pybo 함수에 블루프린트를 적용합니다.
  • 먼저 pybo 디렉터리 아래에 views 디렉터리를 생성합니다.
(myproject) C:\venvs\myproject>cd pybo
(myproject) C:\venvs\myproject\pybo>mkdir views
  • 다음으로 views 디렉터리에 main_views.py 파일을 아래와 같이 작성합니다.
  • [파일명: C:/projects/myproject/pybo/views/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 로 변경 되었습니다.
  • @bp.route 에서 bp 는 Blueprint 클래스로 생성한 객체를 의미합니다.
  • 코드에서 보듯 Blueprint 클래스로 객체를 생성할 떄는 main, name(모듈명), url-prefix='/'(URL 프리픽스) 을 전달해야 합니다.

URL 프리픽스는 접두어 URL을 정할 때 사용

  • URL 프리픽스는 특정 파일(main_views.py) 에 있는 함수의 애너테이션 URL 앞에 기본으로 붙일 접두어 URL을 의미합니다.
  • 예를 들어 main_views.py 파일의 URL 프리픽스에 url_prefix='/' 대신 url_prefix='/main' 이라고 입력했다면 hello_pybo 함수를 호출하는 URL은 localhost:5000/ 이 아니라 localhost:5000/main/ 이 됩니다.

플라스크 앱 생성 시 블루프린트 적용하기

  • 앞서 생성한 블루프린트 파일을 적용하기 위해 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 함수 대신 블루프린트를 사용하도록 변경했습니다.
  • 블루프린트를 사용하려면 main_views.py 파일에서 생성한 블루프린트 객체인 bp를 등록하면 됩니다.

라우트 함수 등록하기

  • 블루프린트가 잘 동작하는지 확인하기 위해 라우트 함수를 추가합니다.
  • main_views.py 파일을 열어 hello_pybo 함수의 URL 매핑을 / 에서 /hello 로 바꾸고, index 함수를 추가해 URL 매핑을 / 로 입력합니다.
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로 접속할 때 웹 서버가 제대로 동작하는지 확인 진행하였습니다.
  • localhost:5000loaclhost:5000/hello 에 접속합니다.
  • localhost:5000 에 접속하면 라우터 / 에 매핑된 index 함수가 호출되어 "Pybo Index" 가 출력되고, localhost:5000/hello 에 접속하면 라우터 /hello 에 매핑된 hello_pybo 함수가 호출되어 "Hello, Pybo!" 가 출력되는 것을 확인할 수 있습니다.

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY