[python] Flask - 모듈화, Blueprint 청사진

[python] Flask - 모듈화, Blueprint 청사진

반응형

0. 들어가기

-. 코드를 짤 때, 한 덩어리 (예를들어 main.py)에 모두 몰아넣는 것이 아니라, 기능별로 분리하여 작성하는 것을 모듈화(modularization)라 하고, 디자인 패턴 등에서 심도있게 다룬다.

-. 난 그냥 한번에 관리하기 힘드니까 잘라서 만들려고 한다. (예를들어 커뮤니티 게시판과 주식분석 게시판을 분리한다.)

-. Flask에서는 찾아보니 Blueprint (청사진?)이란 이름으로 제공한다.

-. 점프 투 플라스크와 ReadTheDocs를 보면서 따라한다.

※ Blueprint 생성 전 설계

-. 처음 할라니 어디부터 해야할지 모르겠다. 우선은 메인페이지/게시판/주식차트페이지를 구분해보겠다.

1) 메인(/main): 로그인 및 현재 사이트 요약

2) 게시판(/board): 유저들의 커뮤니티 글 게시

3) 주식(/stock): 각 주식의 현재 시황 및 지표들 게시

1. Blueprint 사용

-. 어렵진 않은 것 같다. webserver 하위에 폴더를 만들고 ( ex) .views ) 그 아래에 각 분기에 해당하는 route 들을 작성하면 된다.

#/main route에 대한 Blueprint 예시 #========================================= from flask import Blueprint from flask import Flask, render_template, redirect, url_for bp = Blueprint('main', __name__, url_prefix='/main') @bp.route('/') def main(): return 'This is main page' #========================================= #__init__.py 수정 from flask import Flask, render_template, redirect, url_for from jinja2 import Template from .views import main_views, stock_views, board_views app = Flask(__name__) app.register_blueprint(main_views.bp) app.register_blueprint(stock_views.bp) app.register_blueprint(board_views.bp) #root ("/")로 들어오면 "/main" 으로 리다이렉팅 @app.route("/") def hello(): return redirect(url_for("main.main"))

-. 매우 고맙게도, template 폴더는 따로 지정해줄 필요 없이, __init__.py에서 불러오는 경로(/templates)를 공유한다.

-. 출력결과는 생략.

반응형

from http://givemethesocks.tistory.com/42 by ccl(A) rewrite - 2021-02-20 22:26:47