[데이터 엔지니어링] Flask

2022. 4. 12. 17:23AI/Codestates

728x90
반응형

Flask 란?

- Flask는 마이크로 웹 프레임워크

- 웹 프레임워크는 웹 애플리케이션을 개발할 수 있도록 웹 서비스 나 웹 API등을 제공하고 웹 개발과 배포를 할 수 있는 특정 방법을 제공함

- 쉽게 말해 뭔가를 만들어낼 수 있는 도구 모음을 제공함

- Flask는 웹 프레임워크이긴 한데 '마이크로'가 앞에 붙음. 즉, 이러한 도구 모음들이 최소한의 크기로 줄여진 것

▶ 설치

$ pip install flask

▶ 폴더 생성

flask_app
└── __init__.py

▶ Flask 애플리케이션 생성

# __init__.py

from flask import Flask

app = Flask(__name__)

▶ CLI로 실행

$ FLASK_APP=flask_app flask run

▶ 라우트 추가

# __init__.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello World!'

Flask 의 HTML 렌더링

- 웹 브라우저에서 웹 페이지를 볼 때에는 HTML 이라는 마크업 언어를 사용하게됨

- Flask 에서도 HTML 파일들을 제공하면서 웹 페이지를 클라이언트에게 보여 줄 수 있음

from flask import Flask, render_template

app = Flask(__name__)

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

Jinja 란?

- Flask 에서 HTML 을 편리하게 렌더링 하는 함수를 제공을 하기 때문에 쉽게 웹 페이지를 클라이언트에 넘겨줄 수 있음

- Jinja 는 웹 템플릿 엔진 ( Web Template Engine ) 

- 템플릿 엔진은 맞춤형 웹 페이지를 자동으로 생산할 수 있도록 도와줌

▶ Jinja 표현

<body>
  <h1>{{ title }}</h1>
</body>

- {% ... %} : 구문에 사용됨 ( if, for 등 )

- {{ ... }} : 템플릿 결과 ( HTML ) 에 출력할 표현 ( 변수 등 )

- {# ... #} : 주석 처리할 때 사용됨

▶ Flask 에서 Jinja 로 변수 넘기기

(... 생략 ...)
@app.route('/')
def index():
    apple = 'red'
    apple_count = 10
    return render_template('index.html', fruit_color=apple, number=apple_count)
(... 생략 ...)

<body>
  <h2>Apple is {{ fruit_color }}</h2>
  <h2>{{ number }} 개의 과일이 있습니다.</h2>
</body>

(... 생략 ...)

▶ Jinja 기능들

■ 객체 태그 

{{ var }}

{{ fruits.apple }}

{{ vegetables[0] }}

■ if 구문

{% if True %}
<h1>It is True</h1>
{% elif False %}
<h1>It is False</h1>
{% else %}
<h1>It is not True</h1>
{% endif %}

■ for 구문

{% for item in item_list %}
<p>{{ item }}</p>
{% endfor %}

 

loop 속성설명
loop.index 반복 순서 1부터 1씩 증가
loop.index0 반복 순서 0부터 1씩 증가
loop.first 반복 순서가 처음일 경우 True 아니면 False
loop.last 반복 순서가 마지막일 경우 True 아니면 False
{% for item in item_list %}
<p>인덱스 : {{ loop.index0 }}, 이름 : {{ item }}</p>
{% endfor %}

▶ Jinja 상속

- {% extends %}

- {% block %} ... {% endblock %}

■ 자식 상속

{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
    {{ super() }}
{% endblock %}
{% block content %}
    <h1>Index</h1>
    <p class="important">
      Welcome to my awesome homepage.
    </p>
{% endblock %}

■ 진자 블록

<head>
    {% block head %}
    <title>{% block title %}{% endblock %} - My Webpage</title>
    {% endblock %}
</head>
{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
    {{ super() }}
    <h1>자식 블록에서 출력한 h1 입니다.</h1>
{% endblock %}

(... 생략 ...)

Bootstrap

- 공식문서

 

Bootstrap

세계에서 가장 인기있는 HTML, CSS, JS 라이브러리.

getbootstrap.kr

 

728x90
반응형