4. Flask (Blueprint, Jinja Template)

2021. 8. 5. 13:26SERVER/Flask

Blueprint

길어진 코드를 각 역할별로 나누어 모듈화, 수정 개발과 유지보수에 용이하도록 코드를 분류 / 관리

(API, app.route( )들을 관리한다고 생각하면 된다)

 

App.py 서버 파일에 모든 API들이 모여있는 것은 좋지 않은 파일이다

API들을 서버 파일에 하나에 몰아놓으면 유지보수 측면에서 효율성이 떨어지고 가독성도 떨어진다

이를 Blueprint를 이용해 파일을 나누어서 분리 시킬 수 있다

 

 

서버 실행만을 위한 App.py, API들을 관리하기 편하도록 분리시키기 위한 API.py 두 개의 파일을 준비

 

[App.py]

from API import bp

분리시킨 API.py에서 bp를 import

 

app.register_blueprint(bp)

Flask를 정의하고 있는 app에 blueprint object를 register(등록)시키는 과정

이후 Flask가 실행될 때 자동으로 bp를 읽어오게 된다

 

API의 기능들을 분리시켜 모아두게 된 API.py

from flask import Blueprint, jsonify

Blueprint의 기능을 사용하기 위해 import

 

bp = Blueprint('bp', __name__)

app = Flask(__name__) 거의 유사한 역할을 하게 된다

이후 모든 API는 @app.route를 사용했던 것 처럼 @bp.route를 통해 연결되게 된다 

 

 

정상적으로 동작하는 것을 확인할 수 있다

 

 

[정리]

- Blueprint를 사용하지 않아도 Flask Web App을 만들 수 있지만, 복잡한 App 구현시 사용 권장

- Blueprint는 Web App의 개체를 미리 요구하지 않고 기능을 정의할 수 있다

  또한, 파일을 여러개로 분리시켜 효과적인 개발과 유지보수 측면에서의 이점을 가질 수 있다

- Blueprint는 Web App에 등록될 수 있는 청사진, 경로, 기타 앱 관련 기능을 표현한다

- Flask의 요청으로 URL 생성 시 화면을 출력하는 함수를 bp와 연결하여 사용한다

 


Jinja Template

Jinja2는 Python에서 가장 많이 사용되는 Template

서버에서 받아온 데이터를 효과적으로 보여주고, 간략한 표현으로 데이터를 가공할 수 있다

 

페이지를 화면에 출력해주는 함수 render_template을 사용하면서 데이터를 같이 추가해준다

(리턴 render_template에 정의된 변수의 이름과 값으로 Jinja에 전달되게 된다)

 

서버에서 해당하는 페이지로 데이터를 전송할 때 Jinja template을 통해 바로 출력해줄 수 있다

 

HTML 내에서 Python을 사용할 수 있게 되는데 조건문, 반복문 등을 사용하여 출력할 수 있다

 

[list]

list를 만들어서 반복문을 통해 값이 하나씩 출력되기를 의도

조건문, 반복문을 사용시에는 { } 중괄호를 하나만 사용한 후 %를 위와 같이 사용해야 한다

반복문을 통해 값이 하나씩 담길 변수는 기존과 동일하게 {{ }}를 사용

조건문, 반복문이 끝날 때는 반드시 {% endif %}, {% endfor %}와 같이 종료해주어야 한다

 

위와 같은 결과를 확인할 수 있으며, Jinja 문법 사용 중간에도 html을 적용시켜 표현 가능하다

 

 

[dictionary]

딕셔너리 형태로 데이터를 Jinja로 전달

 

딕셔너리 안의 키 값으로 value를 가져와서 클리이언트에게 응답

 

서버로부터의 응답으로 화면에 key의 value값이 출력되는 것을 확인할 수 있다

 

 

[정리]

- rendering은 Markup Language를 Browser에 보여주기 위한 과정을 의미

- rendering 하려는 대상의 template는 무조건 templates 폴더 안에 있어야 한다

- render_template( )를 통해 서버에 저장된 데이터의 표현을 위해 Jinja2를 사용할 수 있다

- Flask는 render_template을 사용하지 않고 HTML 코드만으로도 화면에 출력이 가능하다

'SERVER > Flask' 카테고리의 다른 글

6. Flask (Authentication)  (0) 2021.08.06
5. Flask (CRUD)  (0) 2021.08.05
3. Flask (HTTP Method)  (0) 2021.08.05
2. Flask (JSON, URL)  (0) 2021.08.05
1. Flask (Prologue)  (0) 2021.08.05