본문 바로가기
Web developer/Flask

[Flask] Blueprint

by doongjun 2020. 10. 24.

Flask를 이용해 어플리케이션을 만들 때 한 파일에서 객체를 app으로 선언하고 app.route 데코레이터로 매핑될 함수를 쉽게 지정한다. 그러나 app.route 데코레이터는 create_app()이 실행된 이후에만 존재할 수 있다. 그리고 app.route 데코레이터는 호출될 함수들을 파일 한 곳에서 관리해야 한다. 그렇게 되면 프로젝트의 규모가 커지고 호출될 함수가 많아질수록, 한 곳에서 함수 전부를 관리하기 어렵게 된다.

 

Blueprint는 위와 같은 문제를 해결하기 위해 함수를 여러 곳으로 확장하고 분산시킬 수 있게 만든다.

 

Blueprint의 간단한 예제로, 아래 main1.py의 파일을 두개로 분리하려고 한다.

main1.py

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return "hello world!"


@app.route('/name')
def question():
    return "What your name?"


@app.route('/name/<name>')
def answer(name):
    return "My name is "+name


if __name__ == '__main__':
    app.run()

name으로 매핑될 함수를 askname.py에 데려와 다음과 같이 정의한다.

askname.py

from flask import Blueprint

name = Blueprint("name", __name__, template_folder="templates")


@name.route('/')
def question():
    return "What your name?"


@name.route('/<name>')
def answer(name):
    return "My name is "+name

Blueprint 객체를 name으로 선언했다. 그 후 main.py에 블루프린트를 등록해줘야 한다.

from flask import Flask
from askname import name

app = Flask(__name__)
# 등록될 프린트의 개체, 사용될 url (url_prefix)
app.register_blueprint(name, url_prefix="/name")


@app.route('/')
def hello_world():
    return 'hello world'


if __name__ == '__main__':
    app.run()

askname.py의 블루프린트 객체인 name을 임포트했다. 그리고 app.register_blueprint(name_url_prefix="/name")과 같이 블루프린트를 등록해준다.

'Web developer > Flask' 카테고리의 다른 글

[Flask] Jinja2 Template #1  (0) 2020.10.30
[Flask] Bootstrap  (0) 2020.10.30
[Flask] 대규모 Application 구조  (0) 2020.10.24
[Flask] SQLAlchemy #2  (0) 2020.10.14
[Flask] SQLAlchemy #1  (0) 2020.10.13

댓글