[Stockping #5] 파이썬 Blueprint 사용법, Flask 플라스크 모듈화
my code archive
article thumbnail
반응형

지금까지 프로젝트를 진행하면서 모든 소스를 app.py에 모아서 작성했는데 기능이 추가될 수록 복잡해져서 여러 가지 파일로 나눠서 사용할 수 없을까? (자바 Controller처럼) 방법을 찾아보다가 이럴 때 사용하는 게 바로 블루프린트라는 것을 알게 되었다!


블루프린트(Blueprint)란?

- Flask에서 제공하는 라이브러리

- 각 페이지 혹은 기능에 맞게 분류해서 사용할 수 있게 해준다.

- 큰 애플리케이션을 단순화시키고 확장 프로그램과 라이브러리 등록을 위한 중심 수단으로도 사용된다.


먼저 프로젝트 구조를 Flask Blueprint 구조에 맞춰 변경했다. 원래 각 파일을 폴더별로 나누었는데 파이썬 파일은 모두 바깥으로 빼놓고 가장 상위에 run.py 그리고 __init__.py를 추가했다. 대충 요렇게

stockping

├── app //모든 소스를 app 폴더에 집어넣음
│   ├── home.py	//메인
│   ├── news.py	//뉴스
│   ├── topfifty.py	//top50 종목    <!-- 기능별로 파이썬 소스 분류 -->
│   ├── __init__.py
│   ├── stock
│   │   ├── getStock.py
│   │   ├── stock_token_control.py
│   │   ├── insert_stock_code_.py
│   ├── static	//static 폴더
│   ├── templates	//템플릿 폴더
├──run.py

블루프린트 사용법

1. run.py

run.py 에서는 app 폴더에서 __init__에 선언된 app 객체를 가져와 실행

from app import app

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000 , debug=True)

 

2. __init__.py

__init__.py 파일에선 app 객체를 선언하고 각종 모듈, 데이터베이스, 블루프린트 값을 설정한다.

creat_app() 함수는 flask에서 제공하는 기본 함수이기 때문에 반드시 저 명칭으로 선언해야 한다.

from flask import Flask, render_template, send_from_directory
import json
import urllib.request
import urllib.parse
import cx_Oracle
import os
from bs4 import BeautifulSoup as bs
import requests
from jinja2 import Template


# 대충 상위에는
# config 파일이랑 DB 정보 작성

#__init__.py 파일에선 app 객체를 선언하고 각종 모듈, 데이터베이스, 블루프린트 값을 설정한다.

# 플라스크 프레임워크에서 지정한 함수 이름
def create_app():
    
    app = Flask(__name__)
    from . import home
    from . import topfifty
    
    app.static_folder = "../static"
    app.register_blueprint(home.blueprint)  #home.py에서 사용할 blueprint 객체를 blurprint로 설정
    app.register_blueprint(topfifty.blueprint)
    
    return app

 

3. run이랑 __init__ 파일까지 작성했으면 이제 각 기능이나 화면에 따라 파이썬 파일을 분류해서 작성하고 각 파일에서 블루프린트 객체를 만들면 된다!

 

우리 프로젝트 주요 기능은 메인 화면, 뉴스, 주식, 로그인, 게시판 정도라 이렇게 나눌 예정이고 예시로 메인 화면에 해당하는 home.py를 살펴보면 아래와 같다.

from app import *	#app에 선언된 모든 값을 가져온다.
from flask import Blueprint

app = Flask(__name__)

blueprint = Blueprint("home", __name__, template_folder="templates", static_folder="static", url_prefix="/")

@blueprint.route('/main', methods=['GET', 'POST'])
def index():

 # 소스 생략
       
return render_template('index.html')

 

 

4. 요약 정리하자면

- run.py, __init__.py를 각 양식에 맞춰 작성한다.

- 기능별로 파이썬 파일을 나누고 각 파일에 블루프린트 객체 선언한다.

blueprint = Blueprint()

- 위에서 선언한 블루프린트 이름 그대로 __init 파일에 블루프린트 객체를 등록한다.

app.register_blueprint(home.blueprint)  #home.py에서 사용할 blueprint 객체를 blurprint로 설정

- 각 기능별 파일에서는 main에서 *를 불러오고 블루프린트로 라우팅해 동작하도록 한다.

- url_for() 함수로 리다이렉트를 넘길 때 함수 앞에 블루프린트 객체 이름을 붙여줘야 한다.

 

예를 들면, 메인 화면에서 로고를 클릭 시 메인 화면으로 리다이렉트 시키도록 구현했는데 아래와 같이

 

또 이렇게 하나의 기능 공부 완료~

반응형
profile

my code archive

@얼레벌레 개발자👩‍💻

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

반응형