라우트 함수란?
flask에서는 @app.route('/')와 같이 애너테이션을 통해 url을 매핑한다. 이때 @app.route와 같은 애너테이션으로 매핑되는 함수를 라우트 함수라고 한다.
블루프린트(Blueprint)란?
Flask는 Django와 달리 url들을 파일 단위에서 따로 관리하지 않고, controller의 endpoint 함수에 데코레이터를 붙여서 관리한다.
라우트함수들은 기능이 필요할 때마다 계속 추가되어야하기 때문에 create_app 함수내에 함수가 많을 경우 번거로워질 수 있다. 이때 블루프린트(Blueprint)라는 클래스를 사용하면 라우트 함수들을 보다 더 구조적으로 관리할 수 있다.
Blueprint 사용하기
C:\프로젝트 경로\views\main_views.py에서 임의로 간단한 코드를 작성한다.
@app.route 대신 @bp.route로 변경하여 작성하였다. @bp.route에서 bp는 Blueprint 클래스로 생성한 객체를 의미한다.
from flask import Blueprint
bp = Blueprint('main', __name__, url_prefix='/')
@bp.route('/')
def home():
return 'Hello, This is Home!'
Blueprint 클래스로 객체를 생성할 때는 'main'(이름), __name__(모듈명), url-prefix='/'(URL 프리픽스) 값을 전달해야 한다. 여기서 'main'은 나중에 함수명으로 url을 찾아주는 url_for 함수에서 사용된다.
url-prefix는 특정 파일(main_views.py)에 있는 함수의 애너테이션 URL 앞에 기본으로 붙일 접두어 URL을 의미한다.
ex) url-prefix='/dabi'라고 입력했다면 home() 함수를 호출하는 URL은 localhost:5000 이 아닌 localhost:5000/dabi가 된다.
플라스크 앱 생성 시 Blueprint 적용하기
위에서 생성한 Blueprint 파일을 적용하기 위해 __init__.py 파일을 다음과 같이 작성한다.
아래와 같이 Blueprint를 사용하려면 main_views.py 파일에서 생성한 Blueprint 객체인 bp를 등록하면 된다.
from flask import Flask
from views import main_views
app = Flask(__name__)
app.register_blueprint(main_views.bp)
if __name__ == '__main__':
app.run('0.0.0.0', port=5000, debug=True)
라우트 함수 등록하기
Blueprint가 잘 동작하는지 확인하기 위해 라우트 함수를 추가하고, url 매핑을 /hello로 입력하고, index() 함수를 추가한다.
from flask import Blueprint
bp = Blueprint('main', __name__, url_prefix='/')
@bp.route('/')
def home():
return 'Hello, This is Home!'
@bp.route('/hello')
def index():
return 'hello index'
__init__.py 실행
__init__.py를 실행하고 Blueprint를 이용해 등록한 라우트 함수의 url 매핑들이 잘 동작하는지 확인한다.
localhost:5000 과 localhost:5000/hello에 접속하면 다음과 같이 Hello, This is Home!과 이후에 추가한 hello index가 잘 뜨는 것을 확인할 수 있다.
'Web > Flask' 카테고리의 다른 글
Flask ORM으로 모델 생성하고 데이터 처리하기 (0) | 2022.01.10 |
---|---|
Flask와 MongoDB를 활용한 웹 애플리케이션 만들기(2) | GET, POST 요청 보내기, Meta og 태그 크롤링 (0) | 2021.07.24 |
Flask와 MongoDB를 활용한 웹 애플리케이션 만들기(1) | GET, POST 요청 보내기 (0) | 2021.07.24 |
Flask 설치부터 HTML 파일과 url 연결까지 Flask 기본 사용법 알아보기 (0) | 2021.07.24 |