Flask(Blueprint, Jinja Template)

이상우·2021년 12월 19일
0

Blueprint란?

Flask의 기능이 점점 늘어날수록, 자연스럽게 코드의 양이 증가한다.
그렇게 때문에 Blueprint를 사용해서 길어진 코드를 모듈화해주어 수정 개발과 유지보수에 용이하게 코드를 관리할 수 있다.

Blueprint를 사용하지 않았을 때
app.py

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

@app.route("/", methods=["GET"])
def home_route():
	return jsonfiy('home')

@app.route("/first", methods=["GET"])
def first_route():
	return jsonfiy('first page')
    
@app.route("/second", methods=["GET"])
def second_route():
	return jsonfiy('second page')

@app.route("/third", methods=["GET"])
def third_route():
	return jsonfiy('third page')

#...생략
if __name__=='__main__':
	app.run(debug=True)

blueprint사용했을 경우
app.py

from flask import Flask
from first_api import bp

app = Flask(__name__)
app.register_blueprint(bp)

if __name__=='__main__':
	app.run(debug=True)

first_api.py

from flask import Blueprint, jsoinfy
bp = Blueprint('bp', __name__)

@bp.route('/first', methods=['GET'])
def first_route():
	return jsonfiy('first page')

@bp.route("/second", methods=["GET"])
def second_route():
	return jsonfiy('second page')

Jinja2란?

Jinja2는 python에서 가장 많이 사용되는 템플릿이다.
서버에서 받아온 데이터를 효과적으로 보여주고 비교적 간략한 표현으로 데이터를 가공할 수 있다.

Jinja2 Template에서 데이터 넘겨주기-단일변수
app.py

@app.route("/")
def home():
	return render_template(
    		'index.html',
            data = 'hello'
          )

index.html

<html>
	<head>
    	<title>jinja example</title>
    </head>
    <body>
    	{{ data }}
    </body>
</html>

Jinja2 Template에서 데이터 넘겨주기-list
app.py

@app.route("/")
def home():
	my_list = [1,2,3,4,5]
	return render_template(
    		'index.html',
            data = my_list
          )

index.html

<html>
	<head>
    	<title>jinja example</title>
    </head>
    <body>
    	{{ data }}
        {% for d in data %}
        	{{ d }}
        {$ endfor $}
    </body>
</html>

Jinja2 Template에서 데이터 넘겨주기-dictionary
app.py

@app.route("/")
def home():
	my_data = {'name': 'elice'}
	return render_template(
    		'index.html',
            data = my_data
          )

index.html

<html>
	<head>
    	<title>jinja example</title>
    </head>
    <body>
    	{{ data.get('name') }}
    </body>
</html>
profile
구상한것을 구현할 수 있는 개발자가 되고 싶습니다.

0개의 댓글