1인 1프로젝트 : 8일차 (python Flask & Jinja2 template)

1인 1프로젝트 : 8일차 (python Flask & Jinja2 template)

Flask는 파이썬으로 작성된 마이크로 웹 프레임워크의 하나로, Werkzeug 툴킷과 Jinja2 템플릿 엔진에 기반을 두고 있다. Flask로 누구나 손쉽게 웹 서버를 열 수 있으며, 동작하고 있는 서버 상에서는 debug mode를 통해 어떻게 http 요청이 진행되고 있는지를 알 수 있어 간편하고 깔끔한 웹 프레임워크로 현재까지도 자리잡고 있다.

flask로 로컬에서 웹서버를 만드는 과정은 다음과 같다.

1. python3의 pip로 flask 설치

2. flask 설치 후 가장 기본적인 파일인 app.py를 수정하여 원하는 페이지에 접근할 수 있도록 기본 뼈대 작성.

3. python3 app.py 실행 -> localhost:5000에 잘 붙었는지 확인. (기본 포트는 5000)

4. Jinja2 Template Engine을 사용하여 템플릿 문법이 포함된 HTML 파일을 추가적으로 렌더링할 수 있음.

1. Python Flask 실습 과정

우선, 다음 코드로 python에 flask를 설치한다.

1 $ pip3 install flask cs

그 다음, 다음과 같이 기본 app.py의 내용을 집어 넣어 저장한다.

다음과 같이 준비가 완료 되었다면, 이제 app.py를 실행한다.

다음과 같은 문구가 뜨면서 127.0.0.1:5000에 debug mode가 active된 상태로 실행된 것을 볼 수 있다.

debug 모드에서는 동작 시 오류가 난다면 어떤 부분에서 오류가 났는지 깔끔하게 볼 수 있다는 장점이 있다.

다음과 같이 오류를 확인할 수 있다.

Flask에는 <(converter) : variable_name>이라는 형태로 url에서 인자를 가져오는 방법을 사용할 수 있다.

converter는 다음 5개 중 하나로 지정해줄 수 있다.

string (기본값) : slash가 포함되지 않은 문자열

(기본값) : slash가 포함되지 않은 문자열 int

float

path : string과 동일하지만 slash를 포함한다.

: string과 동일하지만 slash를 포함한다. uuid : UUID(범용고유식별자) 형식

100을 int로 받아 user_name과 같이 출력한 모습이다.

2. Flask Jinja2 연동 + 템플릿 사용법

Jinja는 Python 프로그래밍 언어를위한 Web Template Engine이다.

다음 템플릿을 사용한다면, Flask에서 render_template와 같은 연동 함수를 통해 Template가 포함되어 있는 html 파일을 동적으로 실행할 수 있다.

다음 template code와 app.py를 작성하여 다시 실행해보았다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 < !DOCTYPE html > < html lang = "ko" > < head > < meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < meta http-equiv = "X-UA-Compatible" content = "ie=edge" > {% if title %} < title > {{ title }} < / title > {% endif %} < / head > < body > < h1 > Bind string: {{ home_str }} < / h1 > < p > This page is for Flask tutorial. < / p > < p > Bind list value: {{ home_list[2:4] }} < / p > < ul > {% for idx in home_list %} < li > {{ idx }} < / li > {% endfor %} < / ul > < / body > < / html > Colored by Color Scripter cs

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 from flask import Flask, render_template app = Flask(__name__) @app.route( '/' ) @app.route( '/home' ) def home(): return 'Hello, World!' @app.route( '/user' ) def user(): return 'Hello, User!' @app.route( '/template_test' ) def template_test(): return render_template( 'index.html' , title = 'Flask Template Test' , home_str = 'Hello Flask!' , home_list = [ 1 , 2 , 3 , 4 , 5 ] ) @app.route( '/user//' ) def user_listing(user_name, user_id): return f 'Hello, {user_name}({user_id})!' if __name__ = = '__main__' : app.run(debug = True ) cs

다음과 같이 app.py에 template_test라는 path를 더 만들어 jinja2 template 테스트를 해보았다. 처음 코드는 /templates 폴더 안에 넣어야 render_template에서 참조가 가능하다.

다음과 같이 실행이 잘 되는 것을 확인할 수 있다.

template 안에서도 여러 가지 문법을 사용할 수 있다. 위와 같이 list value를 원하는 만큼 슬라이싱하여 가져올 수도 있다.

Conclusion :

jinja2를 flask에서 사용하여 html의 원하는 부분에 그대로 출력할 수 있게 하여 간편하게 동적 웹을 구현할 수 있다!

[END]

from http://ainsetin.tistory.com/63 by ccl(A) rewrite - 2021-06-15 21:00:11