[Flask] Flask 블루프린트로 라우트 함수 관리하기
- 웹 프로그래밍
- 2022. 3. 28. 21:50
참조
소개
- 앞서 진행한 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:5000 과 loaclhost:5000/hello 에 접속합니다.
- localhost:5000 에 접속하면 라우터 / 에 매핑된 index 함수가 호출되어 "Pybo Index" 가 출력되고, localhost:5000/hello 에 접속하면 라우터 /hello 에 매핑된 hello_pybo 함수가 호출되어 "Hello, Pybo!" 가 출력되는 것을 확인할 수 있습니다.
728x90
'웹 프로그래밍' 카테고리의 다른 글
[Flask] 모델로 데이터 처리하기 - 모델 사용하기 (0) | 2022.03.29 |
---|---|
[Flask] 모델로 데이터 처리하기 - SQLAlchemy 설치 (0) | 2022.03.29 |
[Flask] Flask 애플리케이션 팩토리 (0) | 2022.03.28 |
[플라스크] 플라스크 기초 (0) | 2022.03.28 |
[Flask] 플라스크 개발 환경 준비 - 가상 환경 설정 (0) | 2022.03.28 |
이 글을 공유하기