블루프린트로 라우트 함수 관리하기
위 코드를 보면 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!'가 출력된다.
'Backend' 카테고리의 다른 글
[Backend] Node.js - Express Generator (프로젝트 생성) (1) | 2023.10.29 |
---|---|
[Flask] 플라스크 애플리케이션 팩토리 (0) | 2023.08.13 |
[Flask] 플라스크 기초 다지기 (0) | 2023.08.13 |
[Flask] 가상 환경에서 플라스크 프로젝트 생성하고 실행시키기 (0) | 2023.08.13 |