2-2.블루프린트로 라우트 함수 관리하기

2021. 8. 5. 21:46Mobile App

2-1에서 pybo/__init__.py에 생성한 코드이다. 

from flask import Flask

def creat_app():
	app = Flask(__name__)
	@app.route('/')
	def hello_pybo():
		return "hiroo~~"
	return app

 

hello_pybo함수는 URL에서 /에 매핑 되는 함수이다. 

이 매핑은 @app.route('/')라는 애너테이션이 만들어준다.

이처럼 애너테이션으로 매핑되는 함수를 라우트 함수라고 한다.

매핑이란? 해당 값이 다른 값을 가리키도록 하는 것, 긴 URL경로를 간단하게 표현할 수 있음.

애너테이션이란? @ 와 함께 쓰인 것

 

지금까지는 새로운 url이 생길 때 라우트 함수를 create_app함수 안에 계속 추가해한다.

이때 블루프린트 클래스를 사용해서 해결할 수 있다.=> 라우트 함수를 구조적으로 관리할 수 있음=> URL과 호출되는 함수의 관계를 확인할 수 있다. 

[블루프린트 생성하기]

가상환경을 활성화하고 pybo디렉터리 아래 views 데릭터리를 만든다.

이제 views아래에 main_views.py 파일을 생성하자.

from flask import Blueprint
#line3 블루프린트 객체 생성 
bp = Blueprint('main',__name__, url_prefix='/')	#(이름, 모듈명,URL프리픽스)
@bp.route('/')
def hello_pybo():
    return 'HI, this is main_views!'

 

블루프린트 객체 생성 시 이름 'main'은 나중에 함수명으로 url을 찾아주는 url_for함수에서 사용할 예정이다.

URL프리픽스란?

함수의 애너테이션(즉, bp.route) URL앞에 기본으로 붙일 접두어 URL을 의미한다.

예를들어, url_prefix='/' 대신 url_prefix='/main'이라고 입력했다면, hellp_pybo 함수를 호출하는 url은 localhost:5000/이 아니라  localhost:5000/main/이 된다.

 

[플라스크 앱 생성 시 블루프린트 적용하기]

블루프린트 파일을 적용하기 위해 pybo/__init_.py 파일 을 수정한다. 

from flask import Flask

def create_app():
	app = Flask(__name__)
	from .views import main_views
	app.register_blueprint(main_views.bp)	#블루프린트 객체 bp를 등록
	return app

create_app함수에 등록되었던 hello_pybo 함수 대신 블루프린트를 사용하도록 변경한 것이다.

mina_views.py파일에 블루프린트 객체인 bp를 등록하면 블루프린트를 사용할 수 있다!!

 

[라우트 함수 등록하기]

main_views.py 파일에서 hello_pybo 함수의 URL 매핑을 / 에서 /hello로 바꾸고, index 함수를 추가해 URL 매핑을 /입력하자

URL 매핑을 route('/')로 하라는 뜻

from flask import Blueprint
bp = Blueprint('main',__name__, url_prefix='/')	#(이름, 모듈명,URL프리픽스)
@bp.route('/hello')
def hello_pybo():
    return 'HI, this is blueprint!'

@bp.route('/')
def index():
    return 'pybo index'

 

 

[라우트 함수 동작 확인하기]

가상환경 디렉터리에서 flask run 명령을 실행하고,

http://127.0.0.1:5000와 http://127.0.0.1:5000/hello의 return값을 비교해보자.

 

 

http://127.0.0.1:5000는 URL매핑을 /로 한 return값(pybo index)이 나오고

http://127.0.0.1:5000/hello는 URL매핑을 /hello로 한 return값(HI, this is blueprint)이 나올 것이다.

 

사실, 블루프린트 없이 크게 어려웠던 점이 없어서 유용성을 잘 모르겠다. ㅎㅎ! 

좀 더 알아보기!

'Mobile App' 카테고리의 다른 글

인증  (0) 2021.08.24
API와 HTTP의 관계  (0) 2021.08.09
2-3.모델로 데이터 처리하기  (0) 2021.08.06
2-1.플라스크 애플리케이션 팩토리  (0) 2021.08.04
1.플라스크 개발준비  (0) 2021.08.04