2021. 8. 5. 21:46ㆍMobile 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 |