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 |
댓글