flask03

À̹øÀå¿¡¼­´Â Çöó½ºÅ©¿¡¼­ ºí·çÇÁ¸°Æ®¸¦ »ç¿ëÇÏ¿© º¹ÀâÇÑ ±¸Á¶¸¦ ´Ü¼øÈ­ ¸ðµâÈ­ ½Ãų¼ö ÀÖ´Ù.

main.py
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/index')
def main():
    print("main controller: index")

    return "<a href=\"/food/index\">food</a><br>" \
            "<a href=\"/fruit/index\">fruit</a>"

@app.route('/food/index')
def foodindex():
    return "<a href=\"/index\">food</a><br>"

@app.route('/fruit/index')
def fruitindex():
    return "<a href=\"/index\">fruit</a><br>"

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

URL ¸ÅÇÎÀÌ ÇÊ¿ä ÇÒ¶§¸¶´Ù ¶ó¿ìÆà ÇÔ¼ö°¡ Ãß°¡ µÇ¸é main.py ÆÄÀÏÀÌ °è¼Ó Ä¿Áú°ÍÀÌ´Ù.
ºí·çÇÁ¸°Æ®¸¦ »ç¿ëÇÏ¸é ´Ù¸¥ ÆÄÀÏ¿¡ ¶ó¿ìÆà ÇÔ¼ö¸¦ Ãß°¡ ÇÒ¼ö°¡ ÀÖ´Ù.

ºí·çÇÁ¸°Æ® »ç¿ë¹ý

1. ºí·çÇÁ¸°Æ®¸¦ ÀÌ¿ëÇÏ¿© ¶ó¿ìÆà ÇÔ¼ö¸¦ Á¦ÀÛÇÑ´Ù.
2. create_app ÇÔ¼ö¿¡¼­ register_blueprint·Î ºí·çÇÁ¸°Æ® °´Ã¼¸¦ µî·ÏÇÑ´Ù.

¾Æ·¡¿¡¼­ ÀÚ¼¼ÇÏ°Ô ¼³¸íÇϳ®.

1. ºí·çÇÁ¸°Æ®¸¦ ÀÌ¿ëÇÏ¿© ¶ó¿ìÆà ÇÔ¼ö¸¦ Á¦ÀÛÇÑ´Ù.

main_controller.py ÆÄÀÏ
from flask import Blueprint

bp = Blueprint('main', __name__, url_prefix='/main')

# ¿äû URL : http://127.0.0.1:8888/main/index
@bp.route('/index')
def main():
    print("main controller: index")

    return "<h3>¸ÞÀÎ ¸Þ´º</h3>"\
           "<a href=\"/food/index\">food</a><br>" \
           "<a href=\"/fruit/index\">fruit</a>"

Blueprint °´Ã¼ÀÇ ÀÎÀÚ´Â ´ÙÀ½°ú °°´Ù.

ù¹ø° ÀÎÀÚ: ÀÓÀÇÀÇ À̸§À¸·Î À¯ÀÏÇÑ À̸§À» °¡Á®¾ß ÇÑ´Ù.
µÎ¹ø° ÀÎÀÚ: _name_Àº ¿©±â¼­´Â main_controller.pyÀÌ´Ù.
¼¼¹ø° ÀÎÀÚ: url_prefixÀÌ´Ù.

2. create_app ÇÔ¼ö¿¡¼­ register_blueprint·Î ºí·çÇÁ¸°Æ® °´Ã¼¸¦ µî·ÏÇÑ´Ù.

main.py ÆÄÀÏ
from flask import Flask

def create_app():
    app = Flask(__name__)

    from controller import main_controller

    app.register_blueprint(main_controller.bp)

    return app

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

create_app ÇÔ¼ö¿¡¼­ main_controller.py ÆÄÀÏ¿¡¼­ Á¦ÀÛÇÑ Blueprint °´Ã¼ bp¸¦ µî·ÏÇÑ´Ù.

    app.register_blueprint(main_controller.bp)


½ÇÇà°á°ú)
À¥ºê¶ó¿ìÁ®¿¡¼­ ÁÖ¼Òâ¿¡ http://127.0.0.1:8888/main/index¸¦ ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°´Ù.


food, fruitµµ mainó¸§ Ãß°¡Çغ¸ÀÚ.
food_controler.py, fruit_controller.py, food.html, fruit.hmml ÆÄÀÏÀÌ Ãß°¡ µÇ¾ú´Ù.
ÆÄÀÏÀÇ Æ®¸® ±¸Á¶´Â ´ÙÀ½°ú °°´Ù.




main.py ÆÄÀÏ
from flask import Flask

def create_app():
    app = Flask(__name__)

    from controller import main_controller
    from controller import food_controller
    from controller import fruit_controller

    app.register_blueprint(main_controller.bp)
    app.register_blueprint(food_controller.bp)
    app.register_blueprint(fruit_controller.bp)

    return app

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

main_controller.py  ÆÄÀÏ
from flask import Blueprint

bp = Blueprint('main', __name__, url_prefix='/main')

# ¿äû URL : http://127.0.0.1:8888/main/index
@bp.route('/index')
def main():
    print("main controller: index")

    return "<h3>¸ÞÀÎ ¸Þ´º</h3>"\
           "<a href=\"/food/index\">food</a><br>" \
           "<a href=\"/fruit/index\">fruit</a>"

food_controller.py ÆÄÀÏ
from flask import render_template, Blueprint

bp = Blueprint('food', __name__, url_prefix='/food')

# ¿äû URL : http://127.0.0.1:8888/food/index
@bp.route('/index')
def doindex():
    print("food controller: index")
    return render_template('food.html')

@bp.route('/kimchi')
def dokimchi():
    print("food controller: kimchi")
    return "hello kimchi"

fruit_controller.py ÆÄÀÏ
from flask import render_template, Blueprint

bp = Blueprint('fruit', __name__, url_prefix='/fruit')

# ¿äû URL : http://127.0.0.1:8888/food/index
@bp.route('/index')
def doindex():
    print("food controller: index")
    return render_template('fruit.html')

@bp.route('/apple')
def dokimchi():
    print("food controller: apple")
    return "hello apple"

food.html ÆÄÀÏ
<html>
<head>
    <meta content="text/html; charset=UTF-8" http-equiv="content-type">
    <title>food</title>
</head>
<body>
<h1>À½½Ä ÁÖ¼¼¿ä.</h1>
<a href="/food/kimchi">kimchi</a>
<br>
<br>
</body>
</html>

fruit.html ÆÄÀÏ
<html>
<head>
    <meta content="text/html; charset=UTF-8" http-equiv="content-type">
    <title>fruit</title>
</head>
<body>
<h1>°úÀÏ ÁÖ¼¼¿ä.</h1>
<a href="/fruit/apple">apple</a>
<br>
<br>
</body>
</html>

¼Ò½º:
main.py
controller/main_controller.py
controller/food_controller.py
controller/fruit_controller.py
templates/food.html
templates/fruit.html