상세 컨텐츠

본문 제목

파이썬 파일 관리방법(ft. blueprint 사용)

7. 봉드로이드_개발공부

by 마켓플레이어, 마케터 봉 2024. 10. 13. 18:08

본문

우선 파이썬의 기본 구조는 다음과 같다.

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def home():
   return render_template('index.html')

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

flask의 내장함수인 render_template을 통해 html파일을 불러와 재생시키는 것이다.

그리고 만약 __main__ 구문이 있는 파이썬 파일을 직접 실행했을 때만, port번호 4000으로 실행시키라는 명령어다.

 

음.. __main__ 관련해선 자세한 건 아래 블로그를 참고하자. 더 자세히 설명할 자신이 없다. 그냥 파이썬 파일을 실행시키라는 문구라고 이해하자.

https://tibetsandfox.tistory.com/44

 

파이썬(python) - if __name__ == "__main__"을 사용하는 이유(Feat. 네임스페이스)

개요 파이썬 공부를 하다 보면 심심치않게 다음과 같은 코드를 볼 수 있습니다. if __name__ == "__main__": ... 사실 딱히 진입점(C로 따지면 main함수)이랄게 없는 파이썬에서 "굳이 저런걸 써야하나?" 싶

tibetsandfox.tistory.com

 

아무튼, flask를 통해 웹을 개발하다보면, 여러 페이지에서 라우터 함수를 통해 통신하는 경우가 많이 발생한다.

나만해도, 방명록, 투두리스트를 만드는데, 라우터 함수가 각각 3~4개씩 들어갔다.

그렇다면, 하나의 app.py에서 라우터함수를 쓴다면, 찾기도 힘들고, 관리하기도 힘들고, 무엇보다 충돌이 일어날 가능성도 있다.

 

그렇기에 블루프린트를 사용해, 파이썬 파일을 나눠 라우터를 관리하는 것이다.

예를 들면, 아래와 같은 코드가 있다.

 

우선, 해당 파이썬 파일을 실행시키면, create_app이란 함수를 실행하는 것이다.

여기서 app.route("/")를 통해 main()함수를 호출하고, index.html파일을 불러와 화면에 표시한다. (포트번호 4000이다)

from flask import Flask, render_template,  Blueprint
import config

# ----- blueprint 관련 ----
from views import visitor, todolist, crawling, test


def create_app():
    app = Flask(__name__)
    app.config.from_object(config)

    # ---- 블루프린트 ----
    app.register_blueprint(test.bp, url_prefix="/test")
    app.register_blueprint(visitor.bp, url_prefix="/visitor")
    app.register_blueprint(todolist.bp, url_prefix="/todolist")
    app.register_blueprint(crawling.bp, url_prefix="/crawling")
    # ---------- Blueprint ----------

    @app.route("/") 		
    def main():			
        return render_template("index.html")
    
    if __name__ == "__main__": 
        app.run(host='0.0.0.0', port=4000)
    return app

create_app()

 

각각 test.bp, visitor.bp, todolist.bp 등이 불려올 땐, url이 ~/test, ~/visitor, ~/todolist처럼 prefix, 즉, 고정하라는 의미이다.

다만 visitor라는 것을 import해야하는데, views라는 폴더에서 불러오라는 명령어(from views import visitor....)는 필수이다.

 

그러면 예를 들어, visitor.bp를 불러올 때의 파이썬 파일 코드를 보자.

from flask import Blueprint, render_template, request, jsonify

bp = Blueprint("visitor", __name__, template_folder="templates")

@bp.route('/')
def visitor():
   return render_template('visitor.html')

@bp.route("/api", methods=["POST"])
def visitor_post():
    nickname_receive = request.form['nickname_give']
    comment_receive = request.form['comment_give']
    doc = {'nickname':nickname_receive,'comment':comment_receive}
    db.visitor.insert_one(doc)
    return jsonify({'msg': '방명록 남겨주셔서 감사해요!'})

@bp.route("/api", methods=["GET"])
def visitor_get():
    visitor_list = list(db.visitor.find({},{'_id':False}))
    return jsonify({'visitors':visitor_list})

여기서 중요한 건, bp는 templates라는 폴더에 있는 visitor라는 파이썬 파일을 실행시키라(__name__)는 것이다.

그리고 라우터를 표현할 때, app.route가 아닌, bp.route라 써야하며, 기본 경로에 /visitor가 있다는 것을 참고하자.

그렇기에 @bp.route('/')는 기존의 @app.route(/visitor')와 같은 의미인 것이다. 

 

솔직히 마케터로써 개발 공부 하는 거라 부정확할 수도 있지만, 일단 내가 이해한 원리로는 이렇다.

만약 오류가 있다면 댓글로 남겨주면 수정하겠다.

 

아무튼 결론적으로 아래와 같이 파일을 관리할 수 있게 된다.

다양한 파이썬 파일들은 views 폴더 안에 넣고, 밖에는 app.py 하나만 꺼내놓으면 되는 것이다.

관련글 더보기