반응형

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

위 코드를 보면 create_app() 함수 안에 hello_pybo() 함수가 들어 있다. 이 함수는 URL 에서 /에 매핑되는 함수인데, 그 매핑을 @app.route('/')라는 어노테이션(annotation)이 만들어 준다.

이때 @app.route와 같은 어노테이션으로 매핑되는 함수를 라우트 함수라고 한다. 그런데 새로운 URL이 생길 때마다 매번 라우트 함수를 create_app() 함수 안에 추가하는 것은 너무 번거로운 일이다.

따라서 이때 사용할 수 있는 클래스가 바로 '블루프린트(blueprint)'다.

* 블루프린트(blueprint)는 '청사진'을 의미하는데, 플라스크에서는 URL과 호출되는 함수의 관계를 확인할 수 있는 Blueprint 클래스를 뜻한다.

 

블루프린트 사용하기

1단계. 블루프린트 생성하기

먼저 pybo 디렉터리 아래에 views 디렉터리를 만든 다음 main_views.py 파일을 생성하자.

 

그 후 아래와 같이 블루프린트를 사용하는 코드를 작성하자.

 

위 코드는 pybo/__init__.py 파일에 있던 hello_pybo() 함수를 main_views.py 파일에 그대로 옮긴 것이다.

단, 어노테이션이 @app.route에서 @bp.route로 변경되었다는 점에 주목하자.

@bp.route에서 bp는 Blueprint 클래스로 생성한 객체를 의미한다. 코드에서 보듯 이 클래스로 객체를 생성할 때는 이름, 모듈명, url prefix 값을 전달해야 한다.

* url 프리픽스: 특정 파일에 있는 함수 어노테이션 url 앞에 기본으로 붙일 접두어를 의미한다. 예를 들어, url_prefix='/main'이라고 입력했다면 이 함수를 호출하는 URL은 localhost:5000/main/ 이 된다.

 

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

이제 1단계에서 생성한 bp 파일을 적용하기 위해 __init__.py 파일을 아래와 같이 수정하자.

블루프린트를 사용하려면 7행과 같이 블루프린트 객체인 bp를 등록(register)하면 된다.

위 코드는 create_app() 함수에 등록되었던 hello_pybo() 함수 대신 블루프린트를 사용하도록 변경했다.

 

3단계. 라우트 함수 등록하기

블루프린트를 적용했으니 이제 URL을 등록하고 사용해 보자.

main_views.py 파일을 열어 hello_pybo() 함수의 URL 매핑을 /에서 /hello로 바꾸고, index() 함수를 추가해 URL 매핑을 /로 입력해 보자.

 

4단계. 라우트 함수 동작 확인하기

이제 서버를 중지하고 다시 실행시켜 웹 서버가 제대로 동작하는지 확인해 보자.

 

1. /

localhost:5000

or

127.0.0.1:5000

에 접속하면 라우터 /에 매핑된 index() 함수가 호출되어 'Pybo index'가 출력된다.

 

2. /hello

localhost:5000/hello

or

127.0.0.1:5000/hello

에 접속하면 라우터 /hello에 매핑된 hello_pybo() 함수가 호출되어 'Hello, Pybo!'가 출력된다.